Динамическое регулирование очереди сообщений ActiveMQ с помощью Camel
-
19-08-2019 - |
Вопрос
Я новичок в ActiveMQ / Camel и имею в виду конкретный сценарий. Во-первых, мне интересно, возможно ли это, а во-вторых, может ли кто-нибудь дать небольшое указание.
По сути, мне нужно выполнить динамическое регулирование очереди.Т.е. возможность установки во время выполнения скорость, с которой определенная группа сообщений будет потребляться из очереди.
Поэтому я мог бы, например, добавить группу сообщений, которые должны обрабатываться со скоростью 10 в секунду, другую группу, которая должна обрабатываться со скоростью 1 в секунду и так далее.
Я знаю основы настройки маршрутов в Camel, группировки сообщений в очередь и т. д., но просто не могу понять это из документации.
Решение
Да, похоже, вы ищете регулирование на стороне брокера, чтобы потребители не блокировали его.
Вы подняли свой запрос на форуме пользователей / разработчиков ActiveMQ?
Другие советы
Вы можете просто использовать существующую версию Camel дроссель затем использовать другую очередь для каждого типа сообщений, где вам нужно настроить разную скорость регулирования?
например
from("activemq:Queue1.Input").
throttle(20).
to("activemq:Queue1.Output");
from("activemq:Queue2.Input").
throttle(5).
to("activemq:Queue2.Output");
Почему бы вам не добавить RFE в Apache Camel JIRA?
Какова ваша логика для определения скорости для данной группы сообщений?
Если разные группы сообщений проходят через один и тот же регулятор, это может стать сложным. В некотором роде необходим дискриминатор для определения любого сообщения, к какой группе он принадлежит и, следовательно, с какой скоростью он должен пройти регулятор.
Если вы потратите некоторое время, чтобы заполнить свой сценарий использования и зарегистрировать RFE, я уверен, что сообщество Camel поможет разработчикам.
Вы можете попробовать реализовать это самостоятельно. По сути, все является процессором, поэтому вы можете сделать из (& Quot; activemq: queue: foo & Quot;). Process (myOwnThrottler) .to (& Quot; bean: handleMessage & Quot; ); р>
Вы можете расширить некоторые классы в Camel: - DelegateProcessor - DelayProcessorSupport - Дроссельная заслонка
<Ч>Клаус Ибсен Apache Camel Committer
Интеграция с открытым исходным кодом: http://fusesource.com Блог: http://davsclaus.blogspot.com/
Хорошо, я изложу сценарий немного подробнее и, насколько смогу, выделю главного блокатора.
У меня есть 2 группы сообщений (на самом деле масштаб будет намного больше), каждая из которых имеет разные требования к регулированию. Скажем, я указываю это в заголовке сообщения как flowRate и flowTime.
- Группа 1:Скорость потока = 1;flowTime = 60 (1 в минуту)
- Группа 2:Скорость потока = 1;Flowtime = 1 (1 в секунду)
Я реализую процессор согласно Клаус который проверяет поля заголовка и использует их в качестве входных данных задержки.
Добавляю 20000 сообщений из группы 1 и 20000 из группы 2.
Поскольку дроссель является стороной потребителя, задержка, активированная группой 1, заставит его работать медленно из-за быстрого заполнения входного буфера, и сообщения группы 2 затем застревают... даже если я использую несколько очередей, как указано Джеймс.
Я понимаю, что могу сгруппировать сообщение, используя заголовок JMXGroupID, и реализовать несколько потребителей, но не думаю, что это будет соответствовать требованиям размещения н группы.
По сути, мне было интересно, существует ли какой-либо способ регулирования брокера, а не регулирования на стороне потребителя, или какое-то другое решение, с помощью которого потребитель может регулировать без окончательной блокировки.
Надеюсь, я ясно объяснил, и спасибо за предложения.