Как остановить HornetQ от попытки повторной доставки - PullRequest
0 голосов
/ 11 мая 2018

У меня есть Java-клиент, который обрабатывает сообщения от HornetQ.Обработка может завершиться сбоем из-за временных проблем с сетью, которые я решаю, выдав исключение и настроив очередь на попытку повторной доставки.

Однако обработка может завершиться сбоем по другим причинам, которые означают, что повторять попытку не стоитДоставка.

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

IsЕсть ли способ сделать это?

1 Ответ

0 голосов
/ 11 мая 2018

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

Что вы можете сделать, это обработать сообщение в новой транзакции. Это либо удастся, либо провалится. Если это не удается, вы можете проверить исключение и решить, что вы хотите сделать. Если вы считаете, что он временный, вы можете откатить внешнюю / исходную транзакцию и получить повторную доставку. Если вы хотите, чтобы сообщение попадало в очередь недоставленных сообщений, вы можете опубликовать его вручную, а затем зафиксировать внешнюю транзакцию. Таким образом, вы также можете дифференцировать очереди недоставленных сообщений для технических и функциональных ошибок, если хотите.

Недостатком (за исключением сложности) является то, что внутренняя транзакция может быть зафиксирована, а внешняя ошибка по какой-то причине. В этом случае вы получите дубликаты, поэтому вам нужно убедиться, что вы справитесь с этим.

...