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

StackOverflow https://stackoverflow.com/questions/454084

Вопрос

Я новичок в 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, и реализовать несколько потребителей, но не думаю, что это будет соответствовать требованиям размещения н группы.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top