Я пытаюсь настроить контекст верблюда, который опрашивает очередь weblogic jms, использует сообщение и отправляет его на конечную точку веб-службы. Если в транзакции возникает какая-либо ошибка или целевая система недоступна, мне нужно повторно доставить то же сообщение без потери последовательности или порядка.
Я настроил JMS-маршрут Camel с одним потребителем и включил атрибут transacted согласно https://camel.apache.org/transactional-client.html и установил повторную доставку как неограниченную.
Когда транзакция завершается неудачно с messageA, потребление jms-сообщения из очереди weblogic откатывается, и messageA помечается для повторной доставки (строка состояния помечается как задержанная) в weblogic. Но в течение этого времени, если другое сообщение достигает очереди веб-журнала, верблюжий маршрут выбирает сообщение B и направляет его к конечной точке назначения, хотя messageA все еще находится в режиме повторной попытки. Это искажает весь порядок сообщений.
Клиент транзакции используется, чтобы гарантировать, что сообщения не будут потеряны во время закрытия приложения во время повторной доставки.
Я ожидаю, что нет потери сообщений, и сообщения всегда отправляются в правильном порядке в соответствии с сгенерированной в очереди на целевую конечную точку.