Сохранение заголовков сообщений JMS во время доставки сообщений - PullRequest
0 голосов
/ 07 января 2019

У нас есть верблюжий маршрут, где мы читаем сообщение из входной очереди, обрабатываем его, устанавливаем некоторый JMS-заголовок (используя Exchange.getIn (). SetHeader (...)) и затем направляем сообщение в некоторую выходную очередь. Во время сценария сбоя MQ сообщение доставляется повторно. Однако, пока сообщение доставляется, заголовки JMS, которые я поместил ранее, теряются. Можно ли сохранить заголовки JMS даже после повторной доставки?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

У меня тоже есть эта проблема. я вынужден конвертировать мои объекты в json и сохранять в заголовках jms. и после того, как я снова преобразовать в объект. это сработало для меня!

0 голосов
/ 07 января 2019

Доставка JMS

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

Однако обычно это не проблема. Поскольку при повторной доставке тот же потребитель снова потребляет сообщение и снова делает те же самые модификации в сообщении.

Как только вы достигнете "границы транзакции" на вашем маршруте (это означает, что что-то сделано, что не может быть повторено или приведет к другому результату), вы должны поместить измененное сообщение в другую очередь «сохранить» его текущее состояние.

Оттуда вы можете продолжить с другим потребителем и так далее. Если вы создаете цепочку обработки, подобную этой, ваша система представляет собой Pipes and Filter EIP .

Поставка верблюда

Другая возможность - использовать Camel ErrorHandler . Он обрабатывает ошибки на одном уровне шага маршрута. Он также может делать повторные попытки, но затем вы должны убедиться, что сообщение правильно обработано, если все повторные попытки верблюда завершатся неудачно (например, отправьте сообщение в очередь ошибок).

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

...