JMS AUTO_ACKNOWLEDGE когда это подтверждается?

Я пытался Google это, но не удалось. Если я использую AUTO_ACKNOWLEDGE, и у меня есть потребительский клиент, написанный на Java, когда сообщение подтверждается? Я использую MessageListener который содержит onMessage метод. Передается ли подтверждение обратно на сервер onMessage или после onMessage завершает или в какой-то другой момент? Заранее спасибо за любую помощь, которую может оказать каждый!

2 ответа

Решение

Пожалуйста, проверьте это.

С AUTO_ACKNOWLEDGE В режиме подтверждения всегда происходит последнее, что происходит неявно после onMessage() обработчик возвращает. Клиент, получающий сообщения, может получить более точный контроль над доставкой гарантированных сообщений, указав CLIENT_ACKNOWLEDGE режим на потребительском сеансе.

Использование CLIENT_ACKNOWLEDGE позволяет приложению контролировать отправку подтверждения. Например, приложение может подтвердить сообщение - тем самым освобождая провайдера JMS от его обязанности - и выполнить дальнейшую обработку данных, представленных в сообщении. Ключом к этому является метод cknowledge() объекта Message, как показано в листинге 1.

acknowledge() Метод сообщает провайдеру JMS, что сообщение было успешно получено потребителем. Этот метод генерирует исключение для клиента, если во время процесса подтверждения происходит сбой поставщика. Ошибка поставщика приводит к тому, что сообщение сохраняется сервером JMS для повторной доставки.

CLIENT_ACKNOWLEDGE
В этом режиме подтверждения клиент подтверждает полученное сообщение, вызывая метод подтверждения сообщения.

Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
...
msg = (TextMessage) consumer.receive();
//acknowledge
msg.acknowledge();

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

Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

источник
Лучший пример

Другие вопросы по тегам