过去24小时我一直在研究这个问题。
我正在使用WorkerRoleWithSBQueue Visual Studio模板。
PrefetchCount设置为0.
我甚至尝试使用OnMessageOptions(){MaxConcurrentCalls = 1};
昨天我有两个实例,似乎它同样使用它们。这意味着如果我一次发送两个请求,它将使用两个实例来处理消息。
现在我将实例数增加到10,然后我又回到了绘图板。我发送10条消息,每条消息需要大约15秒才能完成。不知何故,单个实例一次收到两条消息,这意味着应该工作的实例没有消息可以处理。
我有截止日期为12月11日,我开始有点恐慌。
你们有没有这方面的经验?
答案 0 :(得分:0)
您是否使用更多的邮件来衡量?我唯一的问题是 - 你怎么知道ServiceBus是罪魁祸首而不是你的角色实例不那么频繁地拉动数据?在一般情况下 - ServiceBus统一提供。
设置prefetchCount = 0应该是告诉ServiceBus recv的方法。绝对只有一条消息 - 但在我看来 - 它可能不是实现统一分布式处理的正确方法。这样做会影响性能(n / w调用) - 特别是当队列大小很大且接收器滞后于处理消息时,应用程序会遇到这种情况。 相反,我建议制定一个策略,在角色之间分发消息。
其中一种策略是使用Sessions - 如果您知道接收者将始终是一个常数并且确保流量在所有会话ID中均匀分布: - 让所有消息生产者为消息分配一个SessionId - 比方说1-10 - 在接收方 - 使用AcceptMessageSession(sessionId)
如果您认为Sessions不适合您的需求 - 请随时对您的方案进行高级概述。我可以尝试提出一个实现它的好方法。
HTH! SREE