0
votes

I have a Service Bus Queue with several sessions, that I use as way to enforce order per entity.

And I need a worker role to read messages from this Queue, and read messages from any session, in a way that when it's reading a message from a session no other instance of this role will get messages from that session.

What would be the best way to consume those, using a MessageSessionClass or having doing the AcceptMessageSessionAsync and OnMessageAsync(messagehandler)?

Having a hard time understanding which method would fit better in a worker role.

1

1 Answers

1
votes

The Azure SDK 2.3 introduced support for session-awareness when using OnMessageAsync. See sparse MSDN Documentation.

The gist is that you'll implement an MessageSessionAsyncHandler to handle the messages for a given session:

class MySessionHandler : MessageSessionAsyncHandler
{  
    protected override async Task OnMessageAsync(MessageSession session, BrokeredMessage message)
    {
        // Do the work here
    }
}

Then, you'll register that type with the queue client. You can specify how many sessions you want to concurrently process, among other options:

public override bool OnStart()
{
    QueueClient client = ...;
    var options = new SessionHandlerOptions(){ MaxConcurrentSessions = 3 }
    client.RegisterSessionHandler(typeof(MySessionHandler), options);
}