Это действительно зависит от того, как вы отправляете.
Первый ваш вопрос был о Прежде всего, на JMS у вас есть способ отправить недопустимую очередь, так как производитель проверит существование очереди. На HornetQ core api вы отправляете адрес (а не в очередь), и у вас может быть несвязанная очередь. Поэтому вам нужно запросить, имеет ли адрес очереди или нет.
Теперь для подтверждения было получено сообщение:
- Сценарий I, постоянные сообщения, не транзакционно
Каждое сообщение отправлено заблокирован. Клиент будет разблокирован, как только сервер подтвердит получение сообщения. Это делается автоматически. Вам не нужно ничего делать.
- Сценарий II, не являющиеся постоянными сообщения, не транзакционно
Там нет подтверждения по умолчанию. Сообщение отправляется асинхронно. Мы предполагаем, что сообщение преходяще, и это не имеет большого значения, если вы его потеряли. вы можете изменить это, установив on-on-non-persistent-send на ServerLocator.
- Сценарий III, транзакционный (постоянный или нет).
Как только вы вызываете commit, сообщение находится в очередях.
- Сценарий IV, Подтверждение отправки
Вы установили функцию обратного вызова, и вы получите вызов метода, как только сервер acked его очереди. Посмотрите руководство для подтверждения обратного вызова. На JMS2 есть одна и та же функция.