2014-06-20 30 views
1

的消息順序從RabbitMQ - Message order of deliveryEasyNetQ - 遞送

的AMQP 0-9-1核心規範的第4.7節說明了 條件下其順序有保證:消息發佈在 一個通道,經過一個交換並且一個隊列和一個 傳出頻道將按照它們發送的 的相同順序接收。自2.7.0版本以來,RabbitMQ提供了更強大的保證。

EasyNetQ支持嗎?我會預料到它會持續下去,但我有時(但並非總是)看到不同的行爲。

如果消費者是同步的(不是我的情況;我已經鎖定了,但是在這種情況下總是假的「if」之後開始),我是否應該相信消息要按照它們發佈的順序消費? (相同類型的消息,相同的原點,去相同的目的地)還是有其他元素在這裏播放EasyNetQ內部,我應該知道哪些不保留傳遞的消息順序?

回答

2

EasyNetQ爲每個IBus實例實現一個消費者線程,因此如果使用標準的非異步訂閱方法,消息處理程序將按照RabbitMQ傳遞消息的相同順序同步觸發。不應該有任何需要執行鎖定。如果您使用異步訂閱,處理程序仍然會按順序調用,但當然它們可能會按順序發出ACK,具體取決於您如何實現異步處理程序。

+1

消費同一消息隊列有兩種不同的應用程序,我們如何保證只有一個應用程序消費一條消息。 (這兩個應用程序都會監聽隊列,如果其中一個應用程序失敗,另一個應用程序將繼續使用,如果其中一個應用程序正在等待另一個應用程序) – ozz

相關問題