Getting Started
Architecture
NServiceBus
Transports
Persistence
Hosting
ServiceInsight
ServicePulse
ServiceControl
Monitoring
Modernization
Samples

Azure Storage Queues transport native integration sample

Target Version:
NServiceBus 10.x

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 a NativeMessage message to Receiver
  • 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
{
    NativeMessageId = Guid.NewGuid(),
    Content = $"Hello from native sender @ {DateTimeOffset.Now}"
};

var serializedMessage = JsonSerializer.Serialize(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:

  1. Message ID to associate with the incoming message
  2. Serialized message payload as a byte array
  3. Determine the native message type and assign it as an NServiceBus header
transport.MessageUnwrapper = message =>
    message.MessageText.Contains("NativeMessageId") &&
    message.MessageText.Contains("Content")
    ? new MessageWrapper
    {
        Id = message.MessageId,
        Body = message.Body.ToArray(),
        Headers = new Dictionary<string, string>
        {
            { Headers.EnclosedMessageTypes, typeof(NativeMessage).FullName }
        }
    }
    : null; // not a raw native message - allow the framework to deal with it

Related Articles