1

在过去的 24 小时里,我一直在为此工作。

我正在使用 WorkerRoleWithSBQueue Visual Studio 模板。

PrefetchCount 设置为 0。

我什至尝试使用 OnMessageOptions() { MaxConcurrentCalls = 1 };

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

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

我的截止日期是 12 月 11 日,我开始有点恐慌。

你们中有人有这方面的经验吗?

4

1 回答 1

0

您是否用更多的消息来衡量这一点?我唯一的问题是 - 你怎么知道 ServiceBus 是罪魁祸首,而不是你的角色实例不那么频繁地提取数据?在一般情况下 - ServiceBus 统一交付。

设置 prefetchCount=0 应该是告诉 ServiceBus 接收的方式。绝对只有一条消息——但在我看来——它可能不是实现统一分布式处理的正确方法。这样做会导致性能下降(n/w 调用) - 应用程序会遇到这种情况,尤其是当队列很大并且接收器落后于处理消息时。相反,我建议提出一种在角色之间分发消息的策略。

一种这样的策略是使用会话 - 如果您知道接收者将始终是一个常数并且确保流量均匀分布在所有会话 id 中: - 让所有消息生产者为消息分配 SessionId - 让我们说1-10 - 在接收方 - 使用AcceptMessageSession(sessionId)

如果您觉得 Sessions 不符合您的需求 - 请随时对您的场景进行高级概述。我可以尝试提出一个实现它的好方法。

!斯里

于 2014-12-10T19:25:33.510 回答