Есть ли способ, с помощью которого мы можем остановить маршрут Camel, если у нас больше нет сообщений в ActiveMQ? Мой необходимый сценарий.
- Получить все сообщения из очереди ActiveMQ и обработать их.
- Опросите еще 2-3 раза, чтобы проверить, есть ли у нас какое-либо другое новое сообщение, да, выполните шаг № 1.
- Если нет сообщения, остановите маршрут и запустите его снова, скажем, через 5 минут (что, я думаю, может быть достигнуто с помощью стратегии опроса).
0
Hemant Kumar Bothra
17 Дек 2019 в 05:17
1
Можете ли вы также объяснить, ПОЧЕМУ вы хотите это сделать? Приложения для обмена сообщениями обычно управляются событиями, т. е. когда приходит сообщение, оно обрабатывается. Описанный вами подход к опросу сообщений, вероятно, возможен, но он каким-то образом «вредит концепциям», и поэтому у вас больше работы, чтобы сделать это таким образом.
– burki
18 Дек 2019 в 10:20
Насколько я понимаю, компонент Camel ActiveMQ опрашивает очередь, и, поскольку наше приложение находится в облаке, мы хотим минимизировать опрос.
– Hemant Kumar Bothra
25 Дек 2019 в 08:02
1 ответ
Взгляните на этот ответ. Он опрашивает очередь с помощью планировщика и стратегии опроса (POJO).
- С помощью планировщика вы можете выбрать интервал опроса
- С тайм-аутом потребителя стратегии опроса вы можете прекратить потребление (например, если сообщение не поступает в течение 5 секунд, очередь, вероятно, пуста).
Если вы хотите полностью остановить/запустить потребителя, вы можете добавить Camel Control Bus< /a> в смесь. Затем вы можете запускать и останавливать потребительский маршрут.
1
burki
27 Дек 2019 в 11:07
Привет @burki, спасибо, но я попробовал подход, которым вы поделились, но в этом случае, если у нас есть один параллельный потребитель, он будет потреблять только 1 сообщение за 5 секунд и будет ждать опроса, чтобы получить больше, то, что я ищу, больше похоже на обратное вне стратегии
– Hemant Kumar Bothra
27 Дек 2019 в 19:41
Это странно, потребитель связанного ответа должен потреблять все сообщения в очереди из-за цикла приема. Итак, когда вы устанавливаете период таймера на
– 5m
(5 минут), потребитель получает только 1 сообщение в течение 5 минут? Тайм-аута в 3 секунды в примере должно быть достаточно, чтобы обработать уже поставленное в очередь сообщение. Тайм-аут должен происходить только в том случае, если очередь пуста.
burki
30 Дек 2019 в 10:27
Похожие вопросы
Связанные вопросы
Новые вопросы
apache-camel
Apache Camel - это интегрированная среда с открытым исходным кодом, которая фокусируется на быстрой и простой интеграции систем, потребляющих или производящих данные.