Siempre que usemos algún sistema de mensajería tenemos que adaptarnos al límite de tamaño del mensaje que el sistema es capaz de enviar. Este límite varía dependiendo de la tecnología usada.
En la mayoría de sistemas on-premise no hay mucho problema ya que el tamaño acostumbra a ser suficiente para la mayoría de casos. Por ejemplo, en MSMQ – el transporte por defecto en NServiceBus – el límite es de 4MB.
En sistemas en la nube este límite es notablemente inferior. Algunos ejemplos:
- Azure Queues: 8KB
- Azure Service Bus Queues: 64KB
- Amazon SQS: 64KB
En aquellos casos en los que se requiera un límite mayor ya sea porqué usamos NServiceBus en Azure o bien porqué queremos enviar algún dato de gran tamaño como una imagen o video, podemos hacer uso de la propiedad DataBusProperty
Al usar esta propiedad haremos saber a NServiceBus que en el momento de enviar el mensaje éste sea interceptado por un MessageMutator – ver en el post anterior – y la propiedad sea serializada y persistida en una carpeta compartida para que sea deserializada en el momento de ser obtenida por el servidor. Una imagen vale más que mil palabras:
Hacer uso del DataBus es muy simple, básicamente tenemos un mensaje con una propiedad de tipo DataBusProperty
|
|
Posteriormente definimos tanto en el cliente como en el servidor para que NServiceBus use la configuración FileShareDataBus:
|
|
Enviamos el mensaje et voilà:
|
|
Tenemos el mensaje en la cola con la referencia al fichero de la carpeta compartida:
|
|
El ejemplo puede descargarse de: https://github.com/mserrate/NServiceBus.Samples
Nota: Quiero insistir en que dado el tamaño del que disponemos en sistemas de mensajería on-premise la necesidad de usar el DataBus fuera de casos extraordinarios puede significar que no estamos diseñando correctamente los mensajes.