Prerequisites
Ensure an instance of the Azurite Storage Emulator is running.
Azure Storage Queues transport
This sample uses the Azure Storage Queues transport.
Code walk-through
This sample shows a simple two-endpoint scenario.
NativeSender
sends aNativeMessage
message toReceiver
Receiver
receiving and printing out the contents of the received message.
Sending a native message
NativeSender
creates and sends a queue message with a JSON serialized NativeMessage
payload.
var nativeMessage = new NativeMessage
{
Content = $"Hello from native sender @ {DateTimeOffset.Now}"
};
var serializedMessage = JsonConvert.SerializeObject(nativeMessage);
await queueClient.SendMessageAsync(serializedMessage);
Receiving a native message
To process a native message, the native QueueMessage
has to be adapted to the NServiceBus MessageWrapper
first. To accomplish this, a custom envelope unwrapper must be registered to provide the following:
- Message ID to associate with the incoming message
- Serialized message payload as a byte array
- Determine the native message type and assign it as an NServiceBus header
transport.UnwrapMessagesWith(message => new MessageWrapper
{
Id = message.MessageId,
Body = message.Body.ToArray(),
Headers = new Dictionary<string, string>
{
{ Headers.EnclosedMessageTypes, typeof(NativeMessage).FullName }
}
});
Message type could be determined dynamically by reading the payload if different message types are sent natively.