我有一个辅助角色来监控Azure Service总线,该总线可能在高峰时间收到数千条消息。我意识到我可以使用我的云服务来创建工作者角色的多个实例(竞争消费者),并以这种方式扩展,但我也希望每个工作者实例也异步处理多个消息。
所以我的问题在这;在我的Client.OnMessage处理程序中,我可以调用另一个线程上的异步函数,并通过读取下一条消息继续OnMessage吗?理想情况下,这只会发生一定次数。
例如:
Client.OnMessage((receivedMessage) =>
{
try
{
await ProcessCurrentMessage(receivedMessage);
// Would like to launch this asynchronously X times
}
catch(Exception ex)
{
receivedMessage.Abandon();
//Handle error
}
});
public async void ProcessCurrentMessage(BrokeredMessage receivedMessage)
{
// Get properties from this message and do stuff
}
我要做的是通过让每个工作者角色一次处理x个消息来扩展,利用该云服务上的CPU,并通过添加更多云实例来增强它。如果我在队列中有20条消息,10个消费者,10个将开始(每个竞争消费者1个),那么第11个消息将等到一个完成,等等。如果每条消息需要几分钟来处理,这似乎有点像路障。
感谢任何建议或提示。