Динамическое регулирование очереди сообщений ActiveMQ с Camel - PullRequest
2 голосов
/ 18 января 2009

Я ActiveMQ / Camel Noob с особым сценарием, мне интересно, во-первых, возможно ли это, и, во-вторых, может ли кто-то дать небольшое направление.

В основном мне нужно выполнить динамическое регулирование от очереди. I.E возможность установить во время выполнения скорость, с которой определенная группа сообщений будет потребляться из очереди.

Таким образом, я мог бы, например, добавить группу сообщений, которые должны потребляться со скоростью 10 в секунду, другую группу, которая должна потребляться со скоростью 1 в секунду, и т. Д.

Я знаю основы настройки маршрутов для верблюдов и группирования сообщений в очереди и т. Д., Но просто не могу понять это из документов.

Ответы [ 4 ]

4 голосов
/ 19 января 2009

Вы могли бы просто использовать существующий регулятор Camel , а затем использовать разные очереди для каждого типа сообщений, где вам нужно настроить другую скорость регулирования?

, например

from("activemq:Queue1.Input").
    throttle(20).
    to("activemq:Queue1.Output");  
from("activemq:Queue2.Input").
    throttle(5).
    to("activemq:Queue2.Output");  
3 голосов
/ 18 января 2009

Почему бы вам не добавить RFE в Apache Camel JIRA?

Какова ваша логика для определения скорости для данной группы сообщений?

Если разные группы сообщений проходят через один и тот же регулятор, это может стать сложным. В некотором роде необходим дискриминатор для определения любого сообщения, к какой группе он принадлежит и, следовательно, с какой скоростью он должен пройти регулятор.

Если вы потратите некоторое время, чтобы заполнить свой сценарий использования и зарегистрировать RFE, то я уверен, что сообщество Camel, разработчики, может помочь.

Вы можете попробовать реализовать это самостоятельно. По сути, процессором может быть что угодно, поэтому вы можете сделать из («activemq: queue: foo»). Process (myOwnThrottler) .to («bean: handleMessage»);

Вы можете расширить некоторые классы в Camel: - DelegateProcessor - DelayProcessorSupport - Дроссель


Клаус Ибсен Apache Camel Committer

Интеграция с открытым исходным кодом: http://fusesource.com Блог: http://davsclaus.blogspot.com/

1 голос
/ 17 февраля 2009

Да, похоже, вы ищете регулирование на стороне брокера, чтобы потребители не блокировали.

Вы подняли свой запрос на форуме пользователей / разработчиков ActiveMQ?

0 голосов
/ 21 января 2009

Хорошо, я выложу сценарий немного подробнее и выделю основной блокатор, насколько я могу судить.

У меня есть 2 группы сообщений (в действительности масштаб будет намного больше), каждая из которых имеет разные требования регулирования - скажем, я указываю это в заголовке сообщения как flowRate и flowTime.

  • Группа 1: FlowRate = 1; flowTime = 60 (1 в минуту)
  • Группа 2: FlowRate = 1; flowTime = 1 (1 в секунду)

Я реализую Процессор согласно Клаусу , который проверяет поля заголовка и использует их в качестве входных данных для задержки.

Я добавляю 20000 сообщений из группы 1 и 20000 из группы 2

Поскольку дроссель находится на стороне потребителя, задержка, активируемая группой 1, заставит его замедляться, быстро заполняя свой входной буфер, и сообщения группы 2 будут зависать ... даже если я использую несколько очередей согласно Джеймс .

Я понимаю, что могу сгруппировать сообщение, используя заголовок JMXGroupID, и реализовать несколько потребителей, но не думаю, что это будет соответствовать требованиям для размещения n групп.

Что мне было интересно, так это то, есть ли способ сделать брокера, а не регулирование на стороне потребителя, или какое-либо другое решение, посредством которого потребитель может регулировать скорость, не блокируя в конечном итоге.

Надеюсь, я все объяснил четко и спасибо за предложения.

...