Как отправитель может узнать, что сообщение уже используется MQ JMS API? - PullRequest
3 голосов
/ 06 января 2012

Я имею дело с автономным приложением MQ JMS, нашему приложению необходимо «знать», что клиент уже использовал поставщика сообщений, помещенного в очередь.Потому что клиентское приложение не несет ответственности за нас.Поэтому мы не можем позволить им написать что-то вроде «msg.acknowledge ();»вещь на их стороне (msg.acknowledge () не является правильным подходом в моем состоянии.).Я ищу историю ответа в стеке потока.Найти следующее - то же самое, что я хочу:

https://stackoverflow.com/questions/6521117/how-to-guarantee-delivery-of-the-message-in-jms

Поддерживает ли спецификация JMS или различные реализации подтверждение доставки сообщений?

Мой вопрос: есть ли другой способ архивировать это в MQ API или JMS API?Мне нужно делать кодирование только на стороне продукта msg, это может быть очередь или тема.

Другой вопрос в JMS: режим подтверждения CLIENT_ACKNOWLEDGE, это производит неактуально?Я всегда считаю, что этот режим может блокировать приложение при вызове метода send (), пока клиент не получит сообщение и не вызовет msg.acknowledge (), но, похоже, не так.Продукты просто выходят из приложения после доставки сообщения, а сообщение просто сохраняется в очереди до тех пор, пока клиент не вызовет функцию Подтверждения ().Возможно ли, чтобы приложение производителя зависло там и дождалось подтверждения сообщения клиентом?

Если моя концепция не верна, просто исправьте меня, спасибо.

1 Ответ

7 голосов
/ 06 января 2012

Основное назначение очереди сообщений - разделить производителя и потребителя.Производителю не нужно ждать, пока сообщение не будет получено потребителем, он может продолжить свою работу.В идеале, если производитель должен знать, обработано ли сообщение потребителем или нет, ему следует подождать, пока потребитель отправит ответное сообщение в другую очередь.

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

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

Есть ли причина, по которой производитель должен ждать, пока потребитель получит сообщение?Один из способов, хотя и не элегантный, может быть следующим: как только сообщение отправлено, используйте идентификатор отправленного сообщения и попробуйте найти это сообщение.Если сообщение не найдено, вы можете предположить, что оно было израсходовано

...