Tomcat

ActiveMQ - 當消費者 = 零時刪除 VirtualTopic

  • March 24, 2016

我正在嘗試在activeMQ 5.8.0 下使用JMS 實現一個新應用程序。有幾個應用程序被配置為生產者(即在 MQ 中轉儲消息),兩個主題,然後消費者被配置為查看在 Tomcat 伺服器啟動時動態創建的虛擬主題。

範例流程為:

Producer1 (Tomcat) --JMS--> ActiveMQ.VirtualTopic

Consumer.VirtualTopic1 --JMS--> Consumer1 (Tomcat)
Consumer.VirtualTopic2 --JMS--> Consumer2 (Tomcat)

我們希望能夠靈活地啟動任意數量的消費者並讓 ActiveMQ 動態地發送給他們。這是有效的。但是,當消費者伺服器關閉時(由於不再需要它、伺服器崩潰、網路中斷等),我希望 AMQ 停止將消息放在其 VirtualTopic 上,因為流控制正在啟動並且不再消費來自生產者的消息。

我的 activemq.xml 配置為:

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulePeriodForDestinationPurge="10000">

<policyEntry queue=">"  gcInactiveDestinations="true"  inactiveTimoutBeforeGC="30000" />

因此,我希望伺服器在 Tomcat 節點停止後的 40 秒內被標記為非活動狀態(並且消費者數量被標記為零),但這並沒有發生。我錯過了什麼嗎?

謝謝!

我自己找到了答案,對 ActiveMQ 更加熟悉。隊列會自動刪除,但前提是沒有待處理的消息。實施此解決方案的應用程序處理恆定的消息流(大約每秒 20 到 5000 條消息),因此永遠沒有要刪除隊列的視窗。

引用自:https://serverfault.com/questions/708227