Повторная доставка сообщений и обработка ошибок в прослушивателях сообщений - PullRequest
1 голос
/ 01 марта 2012

У нас есть производитель, который выдает сообщение со скоростью, превышающей потребляемую потребителем.Мы используем интеграцию Spring JMS в качестве стека технологий на стороне потребителя.В настоящее время мы используем режим AUTO_ACKNOWLEDGE.

В методе прослушивателя onMessage() при получении мы планируем отправить задание на стороне клиента в очередь заданий и вернуться из метода onMessage().Это означает, что если a) происходит сбой или b) наш сервер выходит из строя, в то время как обработка не дает нам возможности восстановиться.

Мы рассмотрели вариант использования CLIENT_ACKNOWLEDGE, но это означает подтверждение сообщения с более высокой отметкой времениавтоматически подтверждает все сообщения с меньшей отметкой времени.Это явно нежелательно для нас, потому что успешная обработка сообщения с более новой временной меткой никоим образом не означает, что все сообщения с более старой временной меткой обрабатываются полностью.По сути, мы смотрим на подтверждение сообщения.Тем не менее, я где-то читал, что это означает, что есть некоторый недостаток дизайна.

Другой вариант - использовать интерфейс SessionAwareMessageListener, предоставляемый Spring.В договоре об использовании этого интерфейса говорится, что если onMessage выбрасывается из *1013*, сообщение будет доставлено повторно.Однако я не был полностью уверен, как использовать это для наших целей.

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

1 Ответ

0 голосов
/ 20 апреля 2012

Сессионное сообщение имеет следующий прототип onMessage:

 onMessage(Message message, Session session)

Вызовите session.recover () для повторной доставки сообщения.После session.recover () отправит все неподтвержденные сообщения обратно в место назначения jms.

...