Как обеспечить порядок в контексте верблюжьего опроса weblogic jms queue - PullRequest
0 голосов
/ 14 июня 2019

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

Я настроил JMS-маршрут Camel с одним потребителем и включил атрибут transacted согласно https://camel.apache.org/transactional-client.html и установил повторную доставку как неограниченную.

Когда транзакция завершается неудачно с messageA, потребление jms-сообщения из очереди weblogic откатывается, и messageA помечается для повторной доставки (строка состояния помечается как задержанная) в weblogic. Но в течение этого времени, если другое сообщение достигает очереди веб-журнала, верблюжий маршрут выбирает сообщение B и направляет его к конечной точке назначения, хотя messageA все еще находится в режиме повторной попытки. Это искажает весь порядок сообщений.

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

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

1 Ответ

1 голос
/ 14 июня 2019

То, что вновь поступившее сообщение опережает существующее сообщение, которое необходимо доставить, звучит как проблема или функция брокера (Weblogic).

Я никогда не видел такого поведения с ActiveMQ. Сбойное сообщение, которое доставляется, немедленно доставляется брокером Apache.

Звучит так, как будто сообщение «отложено» внутри, чтобы переиздать его позже. Это может иметь смысл, чтобы избежать блокирования обработки сообщений.

Есть ли в Weblogic что-то вроде «задержки на повторную доставку», которую вы можете настроить? Я мог бы представить, что отложенная повторная доставка похожа на внутреннюю очередь ошибок с запланированным потребителем.

...