2016-02-12 103 views
0

我有一種情況,需要從主題讀取(正在進行的)消息並將它們放在另一個隊列中。我懷疑我是否需要jms Queue,或者我可以滿足於內存java Queue。我將通過同一個jvm中的其​​他線程從隊列中讀取隊列,並在從(內存)隊列中讀取消息並根據需要處理消息之後,將客戶端確認消息傳遞給主題(將消息發送給遠程IBM MQ)。因此,如果我的客戶端崩潰,內存隊列中存在的消息將會丟失,但仍然存在於主題上,並將重新傳遞給我。我對嗎 ?jms隊列vs內存java隊列

回答

1

其中一些取決於您如何設置隊列/主題以及您用於從IBM MQ中讀取的連接字符串,但如果您使用默認值,則如果您將它讀取到某個in - 存儲隊列。

我會使用ActiveMQ,或者在與庫相同的JVM中,因此您需要負責接收,傳遞和持久化。

另外,如果你在聽,你不會崩潰後發送錯過的消息的主題,即使你重新算賬,除非你已經

  1. 配置你的客戶爲長期訂戶
  2. 在達到expireMessagesPeriod之前重新連接

ActiveMQ庫並不大,值得使用,如果確保每個消息的傳遞都很重要,尤其是在異步環境中。

0

主要的區別在於,當應用程序關閉時,內存中會丟失數據;如果主題/隊列不是持久性的,則服務器關閉時JMS隊列會丟失數據。前者比後者更可能,所以我也會說跟JMS一起去。