使用会话分区队列的工作者角色 - MessageSessionHandler 或 AcceptMessageSessionAsync

Worker Role consuming a Session Partitioned Queue - MessageSessionHandler or AcceptMessageSessionAsync

我有一个包含多个会话的服务总线队列,我用它来强制执行每个实体的顺序。

我需要一个工作者角色来从这个队列中读取消息,并从任何会话中读取消息,当它从一个会话中读取消息时,这个角色的其他实例不会从该会话中获取消息。

使用 MessageSessionClass 或执行 AcceptMessageSessionAsyncOnMessageAsync(messagehandler) 的最佳消费方式是什么?

很难理解哪种方法更适合工作者角色。

Azure SDK 2.3 在使用 OnMessageAsync 时引入了对会话感知的支持。参见 sparse MSDN Documentation

要点是您将实现一个 MessageSessionAsyncHandler 来处理给定会话的消息:

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

然后,您将向队列客户端注册该类型。您可以指定要同时处理的会话数,以及其他选项:

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