У нас есть производитель, который выдает сообщение со скоростью, превышающей потребляемую потребителем.Мы используем интеграцию Spring JMS в качестве стека технологий на стороне потребителя.В настоящее время мы используем режим AUTO_ACKNOWLEDGE
.
В методе прослушивателя onMessage()
при получении мы планируем отправить задание на стороне клиента в очередь заданий и вернуться из метода onMessage()
.Это означает, что если a) происходит сбой или b) наш сервер выходит из строя, в то время как обработка не дает нам возможности восстановиться.
Мы рассмотрели вариант использования CLIENT_ACKNOWLEDGE
, но это означает подтверждение сообщения с более высокой отметкой времениавтоматически подтверждает все сообщения с меньшей отметкой времени.Это явно нежелательно для нас, потому что успешная обработка сообщения с более новой временной меткой никоим образом не означает, что все сообщения с более старой временной меткой обрабатываются полностью.По сути, мы смотрим на подтверждение сообщения.Тем не менее, я где-то читал, что это означает, что есть некоторый недостаток дизайна.
Другой вариант - использовать интерфейс SessionAwareMessageListener
, предоставляемый Spring.В договоре об использовании этого интерфейса говорится, что если onMessage
выбрасывается из *1013*, сообщение будет доставлено повторно.Однако я не был полностью уверен, как использовать это для наших целей.
Пока я сам больше в этом разбираюсь, любая помощь от вас, ребята, будет очень цениться.