2009-01-17 46 views
2

我是一個ActiveMQ /駱駝noob與心中的具體情況,我想知道如果這是可能的,其次是否有人​​可能提供一個小方向。動態調節一個ActiveMQ消息隊列與駱駝

基本上我需要從隊列中執行動態調節。 I.E在運行時設置從隊列中消耗特定消息組的速率的能力。

例如,我可能會添加一組將消耗在每秒10個消息的消息,另一個組應該以每秒1個消耗等等。

我知道設置駱駝和消息分組到隊列等路線的基本知識,但只是不能從文檔中弄清楚這一點。

回答

1

是啊看起來像你正在尋找經紀人側throtteling,以避免消費者阻止。

您是否在ActiveMQ用戶/開發論壇中提出了您的請求?

3

爲什麼不在Apache Camel JIRA中添加RFE?

對於給定的一組消息,確定速率的邏輯是什麼?

如果不同的消息組通過同一個調節器,它可能會變得複雜。它需要鑑別器來確定它屬於哪個組的哪個消息,因此哪個速率應該通過調節器。

如果您需要一些時間來填寫您的用例並記錄RFE,那麼我確信駱駝社區,開發人員可以提供幫助。

你可以嘗試自己實現它。基本上任何東西都是一個Processor,所以你可以做一個from(「activemq:queue:foo」)。process(myOwnThrottler).to(「bean:handleMessage」);

可以延長一些類的駱駝: - DelegateProcessor - DelayProcessorSupport - 節流


克勞斯易卜生 Apache的駱駝提交者

開源集成:http://fusesource.com 博客:http://davsclaus.blogspot.com/

+1

剛剛買了你的書「駱駝在行動」克勞斯的EAP副本。這是非常好的,我可以肯定地推薦給任何其他人抓住,或想了解更多關於駱駝。非常深入的東西。 – mysomic 2010-09-05 12:21:16

4

你可以使用駱駝現有的throttler然後爲每種類型的消息使用不同的隊列,您需要配置不同的節流率?

例如

from("activemq:Queue1.Input"). 
    throttle(20). 
    to("activemq:Queue1.Output"); 
from("activemq:Queue2.Input"). 
    throttle(5). 
    to("activemq:Queue2.Output"); 
0

OK,我會稍微詳細地制定出方案並儘可能我可以告訴突出主要攔截。

我有兩組消息(實際上規模要大得多),每個消息都有不同的限制要求 - 比方說,我在消息標題中將其指定爲flowRate和flowTime。

  • 組1:FlowRate = 1; flowTime = 60(1每分鐘)
  • 組2:FlowRate = 1;流動時間= 1 (1每秒)

我實現處理器按照Claus其檢查報頭字段,並用它們作爲延遲輸入。

我從組1和20000從組中添加20000個消息2

由於調節器是消費者側,由第1組激活延遲將導致其通過快速填充它的輸入緩衝器和第2級的消息,成爲緩慢將然後卡住...即使我按照James使用多個隊列。

我意識到我可以使用JMXGroupID標頭對消息進行分組並實現多個使用者,但不要認爲這會擴展到適應組組的要求。

我基本上想知道的是,如果有任何方法可以做代理,而不是消費者側調節,或者其他解決方案,消費者可以調節而不會最終阻止。

希望我已經清楚地解釋了自己,並感謝迄今爲止提出的建議。