Getting Started
Architecture
NServiceBus
Persistence
ServiceInsight
ServicePulse
ServiceControl
Monitoring
Samples

Native message access

Target Version: NServiceBus 9.x

Access to the native Azure Storage Queues incoming message

Accessing the native azure storage queue's incoming message from behaviors and handlers can be beneficial for customizations and recoverability. When a message is received, the transport includes the native QueueMessage in the message processing context. You can use the following code to retrieve the message details from a pipeline behavior:

class DoNotAttemptMessageProcessingIfMessageIsNotLocked : Behavior<ITransportReceiveContext>
{
    public override Task Invoke(ITransportReceiveContext context, Func<Task> next)
    {
        var NextVisibleOnUtc = context.Extensions.Get<QueueMessage>().NextVisibleOn;

        if (NextVisibleOnUtc <= DateTime.UtcNow)
        {
            return next();
        }

        throw new Exception($"Message lock lost for MessageId {context.Message.MessageId} and it cannot be processed.");
    }
}

The above behavior utilizes the native message’s NextVisibleOn property to identify when the message lost its lock due to aggressive prefetching and slow processing. If needed, a custom recoverability policy can be implemented to bypass retry attempts that would inevitably fail because of the lost lock.