Как вернуть сообщение в очередь, если HTTP-запрос не удался?

Я использую apache camel с activemq и camel-http, после отправки сообщения на конечную точку и сбоя запроса я все равно теряю сообщение из очереди. Это необходимо, чтобы сообщение не потерялось, если запрос не удался. Как я могу это сделать?

<route>
<from uri="activemq://db_record_rows"/>
<to uri="http://localhost:3000" />
</route>

person D. Batmanov    schedule 21.06.2019    source источник
comment
Используйте транзакцию: Как сделать конечную точку JMS Транзакционный?   -  person Bedla    schedule 21.06.2019
comment
@Bedla, Спасибо, Насколько я понял из статьи, нужно ли настраивать обе конечные точки (от и до)?   -  person D. Batmanov    schedule 24.06.2019
comment
Нет, просто потребитель, который начинает транзакцию.   -  person Bedla    schedule 24.06.2019


Ответы (1)


Вы можете пометить своего потребителя как совершившего транзакцию, чтобы он был обработан менеджером транзакций вашего контекста.

from("activemq://db_record_rows?transacted=true")
.to("http://localhost:3000")
person William Fernandes    schedule 21.06.2019
comment
Спасибо за ответ. Я включил эту опцию для своей очереди, и я увидел такое поведение - конечная точка сделала несколько попыток отправить запрос(сделала только один запрос без транзакций опции), но потом сообщение все равно было удалено из очереди, мне нужно настроить http- конечная точка? - person D. Batmanov; 24.06.2019
comment
Сообщение не было удалено, возможно, оно просто было перемещено в DLQ после N неудачных попыток доставки. Логика повторной доставки настраивается как параметры в brokerUrl. Используйте, например, это для бесконечной повторной доставки jms.redeliveryPolicy.maximumRedeliveries=-1. Подробнее здесь: blog.nantrax.net/?p=820< /а> - person Bedla; 24.06.2019