Верблюд: Маршрутизация из очереди в HTTP - PullRequest
0 голосов
/ 25 сентября 2019

Бит новичка Camel, но здесь идет.

У меня есть следующий маршрут:

    from("activemq:queue:outputQueue").inputType(HelloWorld.class)
    .to("log:stream")
    .marshal().json(JsonLibrary.Jackson, HelloWorld.class)
    .to("http:localhost:5000/messageForYouSir?bridgeEndpoint=true");

Это извлекает сообщения из очереди и отправляет их на конечную точку HTTP как JSON.Хорошо.

Но что, если возникнет ошибка?Скажите код ошибки HTTP 400?Тогда я хочу, чтобы сообщение оставалось в очереди.Я попытался проверить, что сообщение не подтверждено, но не смог заставить его работать.

Также я создал обработчик исключений

    onException(HttpOperationFailedException.class)
    .handled(false)
    .setBody().constant("Vi fekk ein feil");

Но сообщения все еще не были отправлены.очередь.Есть ли какое-то волшебное заклинание, которое может заставить Верблюда не распознавать сообщения, когда есть какая-то ошибка?

1 Ответ

0 голосов
/ 27 сентября 2019

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

Посмотрите документы Camel JMS (компонент ActiveMQ расширяет компонент JMS), особенно разделы о уровнях кэша и транзакционное потребление .

Самая простая установка - это использование брокерских транзакций путем простого задания transacted = true и lazyCreateTransactionManager = false на JmsConfiguration.Таким образом, диспетчер Spring TX не требуется.

Если транзакционное потребление выполняется, а HTTP-сервер возвращает ошибку (в основном, если в маршруте верблюда возникает исключение), Camel автоматически выполняет откат (если вы не уловили ошибку).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...