Table of Contents

Class AzureQueue<TRequest>

Namespace
Savvyio.Extensions.QueueStorage
Assembly
Savvyio.Extensions.QueueStorage.dll

Represents the base class from which all implementations of Azure Storage Queue should derive.

public abstract class AzureQueue<TRequest> where TRequest : IRequest

Type Parameters

TRequest

The type of the request.

Inheritance
AzureQueue<TRequest>
Derived

Constructors

AzureQueue(IMarshaller, AzureQueueOptions, QueueServiceClient, QueueClient, Func<IMessage<TRequest>, IMarshaller, string>, Func<QueueMessage, IMarshaller, IMessage<TRequest>>)

Initializes a new instance of the AzureQueue<TRequest> class with testable Azure Storage Queue clients.

protected AzureQueue(IMarshaller marshaller, AzureQueueOptions options, QueueServiceClient serviceClient, QueueClient client, Func<IMessage<TRequest>, IMarshaller, string> sendMessageFormatter = null, Func<QueueMessage, IMarshaller, IMessage<TRequest>> receiveMessageFormatter = null)

Parameters

marshaller IMarshaller

The marshaller used for serializing and deserializing messages.

options AzureQueueOptions

The AzureQueueOptions used to configure this instance.

serviceClient QueueServiceClient

The queue service client to use.

client QueueClient

The queue client to use.

sendMessageFormatter Func<IMessage<TRequest>, IMarshaller, string>

The function delegate to format messages for sending. If null, a default formatter is used.

receiveMessageFormatter Func<QueueMessage, IMarshaller, IMessage<TRequest>>

The function delegate to format messages for receiving. If null, a default formatter is used.

Exceptions

ArgumentNullException

marshaller cannot be null - or - options cannot be null - or - serviceClient cannot be null - or - client cannot be null.

ArgumentException

options are not in a valid state.

AzureQueue(IMarshaller, AzureQueueOptions, Func<IMessage<TRequest>, IMarshaller, string>, Func<QueueMessage, IMarshaller, IMessage<TRequest>>)

Initializes a new instance of the AzureQueue<TRequest> class.

protected AzureQueue(IMarshaller marshaller, AzureQueueOptions options, Func<IMessage<TRequest>, IMarshaller, string> sendMessageFormatter = null, Func<QueueMessage, IMarshaller, IMessage<TRequest>> receiveMessageFormatter = null)

Parameters

marshaller IMarshaller

The marshaller used for serializing and deserializing messages.

options AzureQueueOptions

The AzureQueueOptions used to configure this instance.

sendMessageFormatter Func<IMessage<TRequest>, IMarshaller, string>

The function delegate to format messages for sending. If null, a default formatter is used.

receiveMessageFormatter Func<QueueMessage, IMarshaller, IMessage<TRequest>>

The function delegate to format messages for receiving. If null, a default formatter is used.

Remarks

The following table shows the initial field values for an instance of AzureQueue<TRequest>.

FieldInitial Value
Savvyio.Extensions.QueueStorage.AzureQueue<TRequest>._sendMessageFormatter
(message, marshaller) =>
    {
        var base64Type = message.GetType()
            .ToFullNameIncludingAssemblyName()
            .ToByteArray()
            .ToBase64String();
        var base64Message = marshaller.Serialize(message)
            .ToByteArray()
            .ToBase64String();
        return $"{base64Type}.{base64Message}";
    };
Savvyio.Extensions.QueueStorage.AzureQueue<TRequest>._receiveMessageFormatter
(rawMessage, marshaller) =>
    {
        var base64Components = rawMessage.MessageText.Split('.');
        var type = Type.GetType(base64Components[0].FromBase64().ToEncodedString());
        return marshaller.Deserialize(base64Components[1].FromBase64().ToStream(), type) as IMessage<TRequest>;
    };

Exceptions

ArgumentNullException

marshaller cannot be null - or - options cannot be null.

ArgumentException

options are not in a valid state.

Methods

ReceiveMessagesAsync(Action<AsyncOptions>)

Receives messages from the Azure Storage Queue.

protected IAsyncEnumerable<IMessage<TRequest>> ReceiveMessagesAsync(Action<AsyncOptions> setup = null)

Parameters

setup Action<AsyncOptions>

The AsyncOptions which may be configured.

Returns

IAsyncEnumerable<IMessage<TRequest>>

A task that represents the asynchronous operation. The task result contains a sequence of IMessage<T> whose generic type argument is TRequest.

SendMessageAsync(IEnumerable<IMessage<TRequest>>, Action<AsyncOptions>)

Sends the specified messages to the Azure Storage Queue.

protected Task SendMessageAsync(IEnumerable<IMessage<TRequest>> messages, Action<AsyncOptions> setup = null)

Parameters

messages IEnumerable<IMessage<TRequest>>

The messages to send.

setup Action<AsyncOptions>

The AsyncOptions which may be configured.

Returns

Task

A task that represents the asynchronous operation.

Exceptions

ArgumentNullException

messages cannot be null.