Я попытался это сделать Google, но не был успешным. Если я использую AUTO_ACKNOWLEDGE
, и у меня есть клиентский клиент, написанный на Java, когда сообщение подтверждено? Я использую MessageListener
, который содержит метод onMessage
. Возвращается ли подтверждение на сервер до onMessage
или после завершения onMessage
или в какой-то другой точке? Заранее благодарим за любую помощь, которую любой может предоставить!
JMS AUTO_ACKNOWLEDGE, когда он подтвержден?
Ответ 1
Пожалуйста, проверьте один.
В режиме AUTO_ACKNOWLEDGE
подтверждение всегда является последним, что происходит неявно после возврата обработчика onMessage()
. Клиент, получающий сообщения, может получить более тонкий контроль над доставкой гарантированных сообщений, указав режим CLIENT_ACKNOWLEDGE
на сеансе потребления.
Использование CLIENT_ACKNOWLEDGE
позволяет приложению осуществлять управление при отправке подтверждения. Например, приложение может подтвердить сообщение, тем самым освободив поставщика JMS от его обязанности, и выполнить дальнейшую обработку данных, представленных сообщением. Ключом к этому является метод accept() для объекта Message, как показано в листинге 1.
Метод acknowledge()
информирует поставщика JMS о том, что сообщение было успешно получено потребителем. Этот метод выдает исключение клиенту, если во время процесса подтверждения происходит сбой поставщика. Ошибка поставщика приводит к тому, что сообщение сохраняется на сервере JMS для повторной доставки.
Ответ 2
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);