Я новичок в ActiveMQ / Camel с особым сценарием, и мне интересно, во-первых, возможно ли это, а во-вторых, может ли кто-нибудь дать небольшое руководство.
В основном мне нужно выполнить динамическое регулирование очереди. I.E возможность установить во время выполнения скорость, с которой конкретная группа сообщений будет потребляться из очереди.
Поэтому я мог бы, например, добавить группу сообщений, которые должны обрабатываться со скоростью 10 в секунду, другую группу, которые должны обрабатываться со скоростью 1 в секунду, и так далее.
Я знаю основы настройки маршрутов в верблюде и группировки сообщений в очереди и т. д., Но просто не могу понять этого из документации.




Почему бы вам не добавить 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/
Вы можете просто использовать существующий дроссель Camel, а затем использовать другую очередь для каждого типа сообщений, где вам нужно настроить другую скорость дросселирования?
например
from("activemq:Queue1.Input").
throttle(20).
to("activemq:Queue1.Output");
from("activemq:Queue2.Input").
throttle(5).
to("activemq:Queue2.Output");
Хорошо, я изложу сценарий более подробно и выделю основной блокиратор, насколько я могу судить.
У меня есть 2 группы сообщений (на самом деле масштаб намного больше), каждая с разными требованиями к дросселированию - скажем, я указываю это в заголовке сообщения как flowRate и flowTime.
Я реализую процессор согласно Клаус, который проверяет поля заголовка и использует их в качестве входных данных для задержки.
Добавляю 20000 сообщений из группы 1 и 20000 из группы 2
Поскольку дроссель является стороной потребителя, задержка, активированная группой 1, замедлит ее из-за быстрого заполнения входного буфера, и сообщения группы 2 будут зависать ... даже если я использую несколько очередей в соответствии с Джеймс.
Я понимаю, что могу сгруппировать сообщение с помощью заголовка JMXGroupID и реализовать несколько потребителей, но не думаю, что это будет масштабироваться в соответствии с требованиями для размещения групп п.
В основном меня интересовало, есть ли какой-либо способ сделать брокерское регулирование, а не регулирование на стороне потребителя, или какое-то другое решение, при котором потребитель может регулировать давление без окончательной блокировки.
Надеюсь, я ясно объяснил, и спасибо за предложения.
Да, похоже, вы ищете дросселирование на стороне брокера, чтобы избежать блокировки потребителей.
Вы подняли свой запрос на форуме пользователей / разработчиков ActiveMQ?
Только что купил EAP-копию вашей книги «Верблюд в действии» Клаус. Он отличный, и я определенно могу порекомендовать его всем, кто разбирается или хочет узнать больше о Camel. Очень подробный материал.