我已經設置了一個JMS服務器作爲JMS提供者(隊列)的HornetQ。強制HornetQ消息的順序
我有一個應用程序作爲生產者和另一個(不同的計算機)作爲消費者。
我知道JMS規範並不保證交貨順序,但我正在尋找一種方法來做到這一點:按照發貨的順序收到消息,確切地說是,即使它是提供商具體。
任何想法?
我已經設置了一個JMS服務器作爲JMS提供者(隊列)的HornetQ。強制HornetQ消息的順序
我有一個應用程序作爲生產者和另一個(不同的計算機)作爲消費者。
我知道JMS規範並不保證交貨順序,但我正在尋找一種方法來做到這一點:按照發貨的順序收到消息,確切地說是,即使它是提供商具體。
任何想法?
顯然這可以通過禁用消費者緩存來實現。這是通過改變hornetq-jms.xml
完成:
<connection-factory name="ConnectionFactory">
<connectors>
<connector-ref connector-name="netty-connector"/>
</connectors>
<entries>
<entry name="ConnectionFactory"/>
</entries>
<consumer-window-size>0</consumer-window-size> <!-- add this line -->
</connection-factory>
其實JMS規範的第4.4.10.2(消息的順序發送)約爲排序很清楚。
如果您擁有單個生產者,並且單個消費者擁有隊列或主題訂閱,那麼即使存在重新傳送,也會始終保證消息排序。
如果您有多個使用者,則在回滾或關閉您的使用者時可能會重新傳遞客戶端緩衝,並且客戶端緩衝區可能不按順序傳遞。
在HornetQ上,你也有消息組,它賦予生成的消息額外的排序約束。
但是,通過將窗口大小設置爲0,您已經有效地殺死了一層會影響性能的緩存。 – 2011-01-03 00:35:37
在我看來,消息的順序比一些潛在的性能損失重要得多。但是,如果你有更好的想法,我真的很想聽到它。謝謝。 – Bogdan 2011-01-03 06:33:19
設置這個選項並不適合我,在HornetQ 2.2.5本地測試。一個客戶端產生消息,一個消費,順序不連續。 – Dag 2012-10-08 14:11:04