1

我有一个分发者和 2 个工作人员,分发者的存储队列中的消息不断增加,每条消息的大小为 2 kb。

我在这里查看了 Udi 的回复 http://tech.dir.groups.yahoo.com/group/nservicebus/message/10698 当分发者向工作节点发送消息时,消息会从分发者的存储队列中清除。话虽如此,工作节点通常会在之后立即发送就绪消息,从而导致存储队列再次填满。

我不清楚“导致存储队列再次填满”。陈述。

我期望分发者的存储队列中的最大消息应该等于工作人员的数量,但事实并非如此。

是否有任何我可能缺少的配置来控制分发者的存储队列清理行为?

4

2 回答 2

1

从 NSB 3.3.2 开始,存在一个已知问题,https: //github.com/NServiceBus/NServiceBus/issues/806 ,在分发者场景中对工作人员使用 SendLocal。这将导致工作人员在每次处理本地发送的消息时发送“准备好接收新消息”。这使得分发者存储队列增长到高于所有工作线程上所有工作线程总和的预期最大值。如果您在本地发送大量消息并且存储队列中的条目数量增长非常大,这可能会成为问题。

解决方法:

  1. 从 SendLocal 切换到 Send
  2. 重新启动工作人员(这将重置存储,但它将为工作人员上的每个 SendLocal 重新建立

There was also a similar issue with SLR(Second Level Retries) functionality( https://github.com/NServiceBus/NServiceBus/issues/571 ), but that was fixed in 3.2.7.

于 2012-12-11T11:43:11.437 回答
0

当工作人员重新启动时,队列将被清除。我猜你是在 2.x 下运行的,我记得队列中的消息数量是工人数量的两倍。我不记得确切的原因,但这并没有真正影响任何事情。

在 3.x 中,我只是验证了每个工作人员有一条消息,并且当工作人员重新启动时它们将被清除。一旦重新启动,worker 将立即调整并报告其可用性,因此队列在恢复后将立即包含消息。

于 2012-11-20T14:16:40.190 回答