2010-11-03 104 views
8

我已經設置了一個JMS服務器作爲JMS提供者(隊列)的HornetQ。強制HornetQ消息的順序

我有一個應用程序作爲生產者和另一個(不同的計算機)作爲消費者。

我知道JMS規範並不保證交貨順序,但我正在尋找一種方法來做到這一點:按照發貨的順序收到消息,確切地說是,即使它是提供商具體。

任何想法?

回答

2

顯然這可以通過禁用消費者緩存來實現。這是通過改變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> 
+1

但是,通過將窗口大小設置爲0,您已經有效地殺死了一層會影響性能的緩存。 – 2011-01-03 00:35:37

+0

在我看來,消息的順序比一些潛在的性能損失重要得多。但是,如果你有更好的想法,我真的很想聽到它。謝謝。 – Bogdan 2011-01-03 06:33:19

+0

設置這個選項並不適合我,在HornetQ 2.2.5本地測試。一個客戶端產生消息,一個消費,順序不連續。 – Dag 2012-10-08 14:11:04

1

其實JMS規範的第4.4.10.2(消息的順序發送)約爲排序很清楚。

如果您擁有單個生產者,並且單個消費者擁有隊列或主題訂閱,那麼即使存在重新傳送,也會始終保證消息排序。

如果您有多個使用者,則在回滾或關閉您的使用者時可能會重新傳遞客戶端緩衝,並且客戶端緩衝區可能不按順序傳遞。

在HornetQ上,你也有消息組,它賦予生成的消息額外的排序約束。