2011-08-05 40 views
2

我需要一些關於主題和選擇器的幫助。activemq,jms主題和訂閱者與選擇器

我有一個具有多個持久訂閱者(每個都帶有選擇器)的主題的場景 由於不匹配的選擇器,並非所有消息都進入主題。

這是正確的行爲。

然而,當無法比擬的信息達到一定的數量門檻,因爲在這一點上沒有其他的消息被傳遞到消費者 的ActiveMQ試圖派遣那些老無可比擬的消息出現問題,但因爲沒有消費者對他們的一切卡住 任何人都可以幫忙嗎?

我的設置是ActiveMQ的5.5

有一些配置選項,或者是它只是一個設計缺陷?

回答

3

我會說這是給有更好的選擇,也許在ActiveMQ中的錯誤有缺陷的設計。

第一個問題:你是製片人發佈到這個話題上設置這些消息的JMSExpiration頭?

如果是,我會做的第一件事是create a Jira issue詳細描述了上面描述的情況,因爲ActiveMQ將繼續保持並繼續發送沒有選擇器應用的消息似乎不正確。

至於設計缺陷,你聽到分鐘自己說:「我需要持久訂閱者」和你正在使用的ActiveMQ,你應立即轉向使用虛擬目的地來代替。虛擬目的地具有主題的優點,因爲生產者可以將消息發送到目的地,並將該消息傳播到N個其他目的地以供消費,但是不具有持久訂戶在主題上帶來的缺點。閱讀更多關於Virtual Destinations here

1

它似乎像一個錯誤,(或至少dashedly不方便),但有一個變通使用Virtual Destinations

報價:

注意,製作專題虛擬確實增加了一個小的CPU開銷時 將消息發送到主題,但它是相當小的。從版本 5.4,從虛擬主題到訂閱隊列的分派可以是 selectorAware,使得只有與現有的 訂戶中的一個相匹配的消息才被實際分派。使用此選項可防止 消費者在使用選擇器時生成不匹配的消息。

2

這涉及到ActiveMQ的處理稀疏選擇的方式。當前的實現不會頁面到商店尋找消息匹配稀疏選擇器,所以你需要進行一些配置更改嘗試和解決此問題。您可以在配置的目標策略中設置maxBrowsePageSize,默認值爲400.請參閱此page。在ActiveMQ中

虛擬目的地可能是更好的選擇,它幾乎總是想着用持久訂閱者時。但是,如果您使用SNAPSHOT版本的ActiveMQ 5.6,則可以將消息過期添加到您的消息中,並將策略配置爲在不活動的持久訂閱者上過期消息。