檢索消息我們有一個問題,在我們的滷麪/ RabbitMQ的設置,其中滷麪突然停止檢索/從RabbitMQ的處理消息。這在上個月發生了兩次,我們不確定如何繼續。滷麪停止從RabbitMQ的
我們的RabbitMQ設置有不同的服務器上的兩個節點,以及滷麪端是一個Windows服務。
我們看到滷麪或在滷麪運行在服務器上的事件日誌中沒有錯誤。 我們在RabbitMQ服務器上也看不到錯誤。
Rebus(和windows服務)繼續運行,因爲我們會看到其他日誌消息,如DueTimeOutSchedular和timeoutreplies。但是,似乎工作線程停止運行,但沒有記錄任何錯誤。
它導致的是不斷增加:(,我們添加日誌監控,以使我們得到通知,如果它再次發生一個RabbitMQ的輸入隊列。
但是我正在尋找就如何繼續「調查」,並就如何防止這種想法,也許你們當中有些人已經在此之前經歷?
UPDATE 看來,我們實際上也有一個節點崩潰,至少最後一次發生。主的RabbitMQ節點崩潰(服務器崩潰),並從被晉升爲主。至於我可以從RabbitMQ的日誌中看到的節點都文噸按計劃。 RabbitMQ日誌中沒有其他錯誤。
在這件事發生滷麪被配置爲只連接到這是從(然後晉升爲大師)的節點如此滷麪沒有經歷過失敗的RabbitMQ,因此沒有滷麪連接錯誤的時間。但是,似乎Rebus在發生故障時停止處理消息。
實際上,我們在這似乎是一個幾隊列體驗這一點,他們中的一些,但不是所有的似乎不同步的狀態已經結束了。
UPDATE 2 我能夠很容易地重現問題,所以它可能是我們的設置中的配置問題。但這是我們重現它的方法
- 在集羣中啓動兩個節點,例如: rabbit1(主)和rabbit2(從)
- Rebus的連接到rabbit2,從屬
- 關閉rabbit1,主。 rabbit2被提升爲掌握
這些隊列被鏡像
我們有兩個小的測試應用程式來重現此,一個「發送」發送消息的每個第二和處理該消息的「消費者」 。
當rabbit1已關閉時,「使用者」停止處理消息,但「發件人」不斷髮送消息並且隊列不斷增長。
- 開始rabbit1再次,它加入作爲從
這有沒有影響,「消費者」仍無法處理的消息。
- 重新啓動「消費者」應用
當「消費者」重新啓動它會檢索所有消息和處理它們。
我想我已經正確地遵循了安裝指南,但它可能是我們的配置問題。我似乎無法找到任何能夠表明我們做錯了什麼的事情。
滷麪仍連接到RabbitMQ的,我們看到,在管理網站的連接選項卡,將「消費者」發送/收到B/S下降至約2 B/S當它停止處理消息
更新3 好吧,所以我下載了Rebus源代碼,並附加到我們的過程中,以便在停止時可以看到「RabbitMqMessageQueue」類中發生了什麼。當「rabbit1 *關閉了 「BasicDeliverEventArgs」 爲空,這是代碼
BasicDeliverEventArgs ea;
if (!threadBoundSubscription.Next((int)BackoffTime.TotalMilliseconds, out ea))
{
return null;
}
// wtf??
if (ea == null)
{
return null;
}
參見:https://github.com/rebus-org/Rebus/blob/master/src/Rebus.RabbitMQ/RabbitMqMessageQueue.cs#L178
我喜歡 「WTF ??」 評論:)
非常感謝。我現在已經多次運行我的測試應用程序,無法重現錯誤,它能夠正確檢測到流結束並重新連接。但是,我們看到「回滾事務時發生錯誤!」錯誤,但在「正常」連接錯誤期間也會發生此錯誤。 Rebus現在繼續檢索郵件:) –
感謝您幫助我改進Rebus - 這是對錯誤的非常有幫助的描述! :) – mookid8000