2013-11-17 5 views
1

Я использую org.hornetq.api.core.client как я могу гарантировать сообщение, что я посылаю фактически достиг очередь (а не клиент, только очередь)?hornetq гарантирует, что сообщение достигло очереди

producer.send("validQueue",clientMessage) 

Обратите внимание, что очередь является допустимой очередью.

этот similar question относится к недопустимой очереди. другие, такие как this one, относятся к доставке клиенту.

ответ

3

Это действительно зависит от того, как вы отправляете.

Первый ваш вопрос был о Прежде всего, на JMS у вас есть способ отправить недопустимую очередь, так как производитель проверит существование очереди. На HornetQ core api вы отправляете адрес (а не в очередь), и у вас может быть несвязанная очередь. Поэтому вам нужно запросить, имеет ли адрес очереди или нет.

Теперь для подтверждения было получено сообщение:

  • Сценарий I, постоянные сообщения, не транзакционно

Каждое сообщение отправлено заблокирован. Клиент будет разблокирован, как только сервер подтвердит получение сообщения. Это делается автоматически. Вам не нужно ничего делать.

  • Сценарий II, не являющиеся постоянными сообщения, не транзакционно

Там нет подтверждения по умолчанию. Сообщение отправляется асинхронно. Мы предполагаем, что сообщение преходяще, и это не имеет большого значения, если вы его потеряли. вы можете изменить это, установив on-on-non-persistent-send на ServerLocator.

  • Сценарий III, транзакционный (постоянный или нет).

Как только вы вызываете commit, сообщение находится в очередях.

  • Сценарий IV, Подтверждение отправки

Вы установили функцию обратного вызова, и вы получите вызов метода, как только сервер acked его очереди. Посмотрите руководство для подтверждения обратного вызова. На JMS2 есть одна и та же функция.