В настоящее время я пытаюсь реорганизовать обработку сообщений JMS для работы в распределенной / облачной среде. Чтобы обеспечить лучшую повторную попытку и обработку ошибок, сообщения сначала сохраняются в базе данных с сущностью JPA, а затем читаются входящим адаптером jpa интеграции Spring. Это работает нормально, пока работает только один экземпляр моего сервиса. Однако, когда запущено несколько экземпляров, они пытаются обработать одно и то же сообщение даже после введения состояния обработки в постоянные сообщения.
Я уже пытался сохранить сообщения JMS в хранилище сообщений JDB C, однако тогда мне пришлось бы определить идентификатор группы, в соответствии с которым экземпляр мог бы выбрать сообщение, что на самом деле невозможно, так как число экземпляров - Dynami c, и я не могу назначить идентификатор группы для каждого экземпляра. Другой возможностью может быть какая-то распределенная блокировка с LockRegistry, но я не мог заставить это работать.
Есть ли у вас какие-либо подсказки / советы, как мне лучше всего реализовать следующие требования при интеграции пружин:
- Сообщение JMS должно сохраняться
- Любой экземпляр может выбрать сообщение и обработать его
- Если обработка завершится неудачно, будет повторная попытка в течение x раз (также может быть повторена другим экземпляром)
- Если экземпляр аварийно завершает работу или его убивают во время обработки сообщение не должно быть потеряно
Может быть, есть какой-нибудь компонент весеннего облака, который может быть полезен? Я рад каждому совету, в каком направлении мне следует go.