﻿# Native message access

<!-- Version variant: asqn_13; default: [/transports/azure-storage-queues/native-message-access.md](/transports/azure-storage-queues/native-message-access.md) -->


## 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:

<!-- snippet: access-native-incoming-message -->

```cs
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.");
    }
}
```

<!-- endsnippet -->

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](/nservicebus/recoverability/custom-recoverability-policy.md) can be implemented to bypass retry attempts that would inevitably fail because of the lost lock.
