如何在多个实例之间平均分配Azure服务总线队列的处理?

如何在多个实例之间平均分配Azure服务总线队列的处理?,azure,load-balancing,servicebus,azure-servicebus-queues,Azure,Load Balancing,Servicebus,Azure Servicebus Queues,过去24小时我一直在做这个 我正在使用WorkerRoleWithSBQueue Visual Studio模板 预取计数设置为0 我甚至尝试了OnMessageOptions{MaxConcurrentCalls=1} 昨天我有两个例子,它似乎在平等地使用它们。这意味着,如果我同时发送两个请求,它将使用这两个实例来处理消息 现在,我将实例数提高到10个,现在回到绘图板上。我发送10条消息,每条消息大约需要15秒才能完成。不知何故,一个实例同时接收两条消息,这意味着一个应该工作的实例没有一条消息

过去24小时我一直在做这个

我正在使用WorkerRoleWithSBQueue Visual Studio模板

预取计数设置为0

我甚至尝试了OnMessageOptions{MaxConcurrentCalls=1}

昨天我有两个例子,它似乎在平等地使用它们。这意味着,如果我同时发送两个请求,它将使用这两个实例来处理消息

现在,我将实例数提高到10个,现在回到绘图板上。我发送10条消息,每条消息大约需要15秒才能完成。不知何故,一个实例同时接收两条消息,这意味着一个应该工作的实例没有一条消息要处理

12月11日是我的最后期限,我开始有点恐慌了


你们当中有人有过这样的经历吗

您是否用更多的消息来衡量这一点?我唯一的问题是-您如何知道ServiceBus是罪魁祸首,而不是您的角色实例拉取数据的频率较低?在一般情况下,ServiceBus提供统一的服务

设置prefetchCount=0应该是通知ServiceBus到recv的方法。绝对只有一条消息——但在我看来——这可能不是实现统一分布式处理的正确方法。这样做会对性能造成影响,即n/w调用—应用程序会遇到这种情况,尤其是当队列大小较大且接收方在处理消息方面落后时。 相反,我建议制定一个策略,在角色之间分发消息

其中一种策略是使用会话-如果您知道接收器将始终是一个常量,并且确保通信量均匀分布在所有会话id上: -让您的所有消息生产者为消息分配一个SessionId,比如1-10 -在接收器端-使用

如果您觉得会话不适合您的需要,请随时提供您的场景的高级概述。我可以试着提出一个好方法来实现它

嗯! 斯雷