何时清除分发服务器存储队列

时间:2012-11-15 16:31:59

标签: nservicebus

我有一个经销商和2个工人,在经销商的存储队列消息中不断增加,每个消息的大小为2 kb。

我在这里经历了Udi回复 http://tech.dir.groups.yahoo.com/group/nservicebus/message/10698 在将消息分派给工作节点时,消息将从分发服务器的存储队列中清除。 话虽这么说,工作节点通常会在之后发送就绪消息,导致存储队列再次填满。

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

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

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

2 个答案:

答案 0 :(得分:1)

从NSB 3.3.2开始,存在一个已知问题https://github.com/NServiceBus/NServiceBus/issues/806,在分发方案中使用SendLocal on worker。每次处理本地发送的消息时,这将导致工作人员发送“准备好新消息”。这使得分发服务器存储队列增长超过所有工作线程上所有工作线程总和的预期最大值。如果您在本地发送大量消息并且存储队列中的条目数量变得非常大,则可能会出现问题。

解决方法:

  1. 从SendLocal切换到发送
  2. 重新启动工作人员(这将重置存储,但会为工作人员的每个SendLocal再次建立
  3. SLR(二级重试)功能(https://github.com/NServiceBus/NServiceBus/issues/571)也存在类似问题,但在3.2.7中已修复。

答案 1 :(得分:0)

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

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