使用会话分区队列的工作者角色 - MessageSessionHandler 或 AcceptMessageSessionAsync
Worker Role consuming a Session Partitioned Queue - MessageSessionHandler or AcceptMessageSessionAsync
我有一个包含多个会话的服务总线队列,我用它来强制执行每个实体的顺序。
我需要一个工作者角色来从这个队列中读取消息,并从任何会话中读取消息,当它从一个会话中读取消息时,这个角色的其他实例不会从该会话中获取消息。
使用 MessageSessionClass
或执行 AcceptMessageSessionAsync
和 OnMessageAsync(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);
}
我有一个包含多个会话的服务总线队列,我用它来强制执行每个实体的顺序。
我需要一个工作者角色来从这个队列中读取消息,并从任何会话中读取消息,当它从一个会话中读取消息时,这个角色的其他实例不会从该会话中获取消息。
使用 MessageSessionClass
或执行 AcceptMessageSessionAsync
和 OnMessageAsync(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);
}