Динамическое регулирование очереди сообщений ActiveMQ с помощью Camel

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

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

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
3 960
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

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

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

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


Клаус Ибсен Коммиттер Apache Camel

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

Только что купил EAP-копию вашей книги «Верблюд в действии» Клаус. Он отличный, и я определенно могу порекомендовать его всем, кто разбирается или хочет узнать больше о Camel. Очень подробный материал.

mysomic 05.09.2010 16:21

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

например

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

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

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

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

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

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

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

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

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

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

Ответ принят как подходящий

Да, похоже, вы ищете дросселирование на стороне брокера, чтобы избежать блокировки потребителей.

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

Другие вопросы по теме