Избегайте отправки сообщения верблюдом в очередь, когда RabbitMQ не работает

Я новичок в RabbitMQ и Apache-Camel. Сообщения отбираются через интерфейс (IMAP и т. Д.) И отправляются в очередь для дальнейшей обработки. Я изо всех сил пытаюсь найти решение, чтобы избежать потери сообщений в сценарии, когда RabbitMQ не работает. Что было бы лучшим решением, чтобы сообщения не отправлялись в очередь верблюжьим маршрутом?

Я использую Spring DSL с верблюжьей версией 2.25.1.

Заранее спасибо.


person DevelopperX    schedule 07.07.2020    source источник


Ответы (2)


Проблема в таких сценариях интеграции заключается в следующем: когда цель не работает, где вы можете сохранить сообщение, пока цель снова не появится?

Поскольку обычно у вас нет возможности сохранить данные, у вас нет другого выбора, кроме как вернуть их в источник.

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

Если вы не можете обработать сообщение или цель не работает, вы откатываете транзакцию, чтобы источник оставался ответственным за сообщение.

Таким образом, ваша интеграция никогда не несет ответственности за данные. Сообщения либо остаются в источнике, либо достигают цели.

Итак, возвращаясь к вашему вопросу, вам не нужно избегать отправки сообщения недоступному брокеру (как вы могли заранее узнать, что он не работает?), Но если отправка не удалась (по какой-либо причине), вам следует убедитесь, что сообщение не было удалено / зафиксировано в исходной системе.

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

После объяснения основного принципа я должен добавить, что в системах обмена сообщениями брокеры являются сердцем системы и, следовательно, должны быть высокодоступными (кластер, сеть брокеров и т. Д.). Так что очень хорошо подумать о сценарии отказа от брокера, но это должен быть очень редкий крайний случай.

person burki    schedule 07.07.2020
comment
Я согласен. Принято решение, что брокер должен быть высокодоступным, а также кластеризованным (в некотором роде). Всегда существует вероятность того, что брокеры могут быть недоступны в случае аварии, но даже в этом случае другие компоненты также не должны работать. Сейчас мы рассматриваем это как приемлемый риск. Спасибо за тент. - person DevelopperX; 10.07.2020

Вы можете записывать неудачные сообщения в файл. И может иметь другой маршрут для чтения из файла и отправки в очередь. Что вы должны иметь возможность запускать по запросу (после того, как убедитесь, что ваш брокер jms запущен и работает)

person Prashant Bhardwaj    schedule 08.07.2020
comment
Хороший ответ. Мы это уже реализовали. У нас есть несколько сервисов, которые запускают приложения весенней загрузки с верблюжьими маршрутами в них. Одна из этих служб - служба резервного копирования, которая выполняет резервное копирование сообщений в файлы вместе с метаданными. Но прежде чем сообщения достигли этой службы, они уже прошли одну или несколько очередей в rabbitmq. - person DevelopperX; 10.07.2020