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);