2011-04-26 37 views
1

有人可以確認我對這件事是否正確或錯誤。在我看來,「選擇器」操作是在MessageConsumer實現中完成的。 (即所有消息仍然從Message Broker分派給MessageConsumer,然後針對這些消息執行「選擇器」操作)。當我們有一堆我們不感興趣的消息(即不匹配我們的選擇器)時,會出現問題,由於預取或緩存限制,這些消息最終會填滿MessageConsumer的內部隊列。因此,我們將無法收到任何新消息,特別是我們對選擇器感興趣的消息。ActiveMQ上的MessageConsumer選擇器問題

那麼,有沒有辦法配置AMQ在MessageBroker端執行選擇器操作?我應該開始看「攔截器」並創建我自己的BrokerPlugin嗎?有關如何解決此問題的任何建議?

我非常感謝任何答案。

感謝, Soonthorn A.

回答

1

選擇器實際上是在經紀人應用,而不是在客戶端。如果您的選擇器很稀疏並且目的地看到很多流量,那麼代理可能沒有在與選擇器匹配的消息中分頁,並且在消費者從目的地消耗更多消息之前,消費者不會看到任何匹配。

問題出在您的經紀人的目的地政策。默認情況下,代理只會在200條消息中爲瀏覽器分頁,以避免佔用所有可用內存並避免影響整體性能。您可以在activemq.xml中通過您自己的DestinationPolicy增加此編號,請參閱文檔頁面here