Основная проблема заключается в том, что я могу обрабатывать только 7000 сообщений из одной из моих очередей (через все машины) в течение одного часа. Я не вижу способа сделать это с помощью верблюда или activemq, поэтому я прибегал к реализации собственной логики остановки маршрута/запуска. Я вижу несколько способов сделать это, и я попробовал несколько из них (только для того, чтобы столкнуться с проблемами).Каков правильный способ «приостановить» маршрут с помощью верблюда с activemq?
camelContext.stopRoute(route)
: Это работает в том, что сообщения перестают быть обработано, но когда я называюcamelContext.startRoute(route)
, это просачивается соединение TCP, который в конечном итоге приводит к тому, ActiveMQ сервера, чтобы ударить свой предел и умереть.camelContext.suspendRoute(route)
: Это также предотвращает обработку сообщений и не вызывает утечки соединений, но, похоже, он убивает активных потребителей (видимых на панели администратора), которые не активируются при вызовеcamelContext.resumeRoute(route)
. Я думаю, что в конечном итоге это может привести к тому, что никакие сообщения не будут обработаны из этой очереди вообще, даже если я возобновляю.- Осуществление пользовательских
RoutePolicy
. Справедливости ради, я еще не пробовал этого, но кажется, что он станет жертвой тех же проблем, которые у меня были в соответствии с методом паузы, который я выбрал выше.
Есть ли способ решения этой проблемы, с которым я еще не сталкивался?
Политика маршрутизации клиентов будет такой, как я бы это сделал. Когда вы говорите «в соответствии с методом паузы, который я выбрал выше», я подумал о политике маршрута, которую вы только что назвали stopConsumer() и startConsumer(), как это делает ThrottlingInflightRoutePolicy. –
Помог бы «троллей»? http://camel.apache.org/throttler.html – vikingsteve
@vikingsteve Мне нужно дросселировать уровень очереди на всех машинах, которые обрабатывают эту очередь. Указанное дросселирование ограничивает обработку только одной машины. – Denise