我正在使用默認的ActiveMQ(版本5.10.0)配置,它應該將消息保留到磁盤。使用REST時ActiveMQ持久性問題
當我在主題上發佈某些消息時,請關閉activemq,重新啓動它,然後啓動使用者,使用者不會收到消息。
這裏是一個詳細的描述。
- 我使用REST接口爲主題X訂閱消費者。
- 我使用REST發佈有關主題X的消息
- 我關閉了ActiveMQ,然後重新啓動它。
- 我開始消費者接收關於主題X的消息。沒有收到任何消息。
那麼,我發送的信息發生了什麼?
我使用發佈命令:
curl -u admin:admin -d "body=test" "http://localhost:8161/api/message/erdata" -d type=topic
命令訂閱:
wget --user admin --password admin --save-cookies cookies.txt --load-cookies cookies.txt --keep-session-cookies "http://localhost:8161/api/message/erdata?type=topic&clientId=consumer"
UPDATE
基於Erik的答案我已經嘗試使用虛擬主題。 我已經加入到activemq.xml中下面的代碼:
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<virtualTopic name=">" prefix="VirtualTopicConsumers.*." selectorAware="false"/>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>
我也改變了我的命令提供發佈和使用。
用於發佈新的命令:
curl -u admin:admin -d "body=val1" "http://localhost:8161/api/message/VirtualTopic/erdata" -d type=topic
新的命令消耗:
wget --user admin --password admin --save-cookies cookies.txt --load-cookies cookies.txt --keep-session-cookies "http://localhost:8161/api/message/Consumer/A/VirtualTopic/erdata?type=queue&clientId=A"
現在的問題是,我甚至不消費收到任何消息。 hawtio告訴我,我有一個主題VirtualTopic.erdata,其中有0個消費者,4個消息入隊,並且有0個出隊和0個調度消息。有一個隊列Consumer.A.VirtualTopic.erdata有1個消費者,但有0個入隊,分派和出隊消息。我在這裏做錯了什麼?
格雷戈爾
喜埃裏克,感謝你的答案。我嘗試過,現在我的主題訂閱中沒有收到任何消息。我在上面更新的問題中寫了我的更改 - 你能告訴我我的錯誤在哪裏嗎? – 2014-11-24 09:40:43
查看創建的隊列名稱與您使用的URL。 Consumer/A/VirtualTopic/erdata創建了一個名爲Consumer.A.VirtualTopic.erdata的隊列。如果您將此更改爲VirtualTopic/erdata,則您將收聽消息正在持續保存的同一隊列。使用您設置的複製和粘貼VT,所有主題都會將消息複製到以VirtualTopic開頭的隊列中。閱讀文檔以獲取更多細節。 – 2014-11-24 14:52:36