2012-11-15 63 views
1

我有一個分配器和兩個工人,在分配器的存儲隊列中消息不斷增加,每個消息的大小爲2 kb。何時分配器存儲隊列被清除

我已經通過Udi在這裏回覆 http://tech.dir.groups.yahoo.com/group/nservicebus/message/10698 消息從分發者的存儲隊列中清除時,它分派消息到工作節點。這就是說,工作節點通常會立即發送準備好的消息,導致存儲隊列再次填滿。

我不清楚「導致存儲隊列再次填滿」。聲明。

我期待經銷商的存儲隊列中的最大消息應該等於工作者數量,但事實並非如此。

是否有任何配置可能會遺漏以控制分發者的存儲隊列清理行爲?

回答

1

自NSB 3.3.2起,有一個已知問題https://github.com/NServiceBus/NServiceBus/issues/806,在分發者場景中的工作者上使用SendLocal。這將導致工作人員在每次處理本地發送的消息時發送「準備好發送新消息」。這使分銷商存儲隊列增長到所有工作人員上所有工作線程總和的預期最大值之上。如果您在本地發送大量郵件以及存儲隊列中的條目數量增長很大,則這可能會成爲問題。

解決方法:從SendLocal

  1. 交換機發送
  2. 重新啓動工人(這將重置存儲,但它會再次積累,每SendLocal在工人

有還有一個與單反(二級重試)功能(https://github.com/NServiceBus/NServiceBus/issues/571)類似的問題,但是在3.2.7中修復了這個問題

0

當工人重新啓動時,隊列將被清除。我猜你正在2.x下運行,我記得隊列中的消息數量是工作人員數量的兩倍。我不記得確切的原因,但它並不影響任何事情。

在3.x中,我剛剛驗證每個工作人員都有一條消息,並且他們將在工人重新啓動時被清除。一旦重新啓動,工作人員將在之後調整並報告其可用性,以便在隊列恢復後隊列中將有消息。

+1

我正在使用NSB 3.2.2。我已經解決了這個問題。我正在使用SendLocal發送消息給自己,但在分佈式環境中,工作人員正在向分發者發送控制消息,以便發送給自己的每條消息都不知道爲什麼。當我停止使用SendLcal消息時,不會在分發服務器存儲隊列中堆積。 – user1453927