Tomcat
ActiveMQ - 當消費者 = 零時刪除 VirtualTopic
我正在嘗試在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 條消息),因此永遠沒有要刪除隊列的視窗。