Получение исходного сообщения из маршрута Camel после разделения - PullRequest
0 голосов
/ 29 мая 2020

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

У меня проблема с получением исходного сообщения, полученного в начале, когда выдается ответ 500.

Я думал, что разделитель возвращает исходное сообщение?

Вот мой маршрут:

    from(gatewayRouteConfig.getInputQueueEndpoint())
            .process(process1)
            .process(process2)
            .setExchangePattern(ExchangePattern.InOnly)
            .choice()
            .when().jsonpath("Message", true)
            .setBody(MESSAGE_WRAPPER_EXTRACTOR)
            .end()
            .split().method(messageSplitter, "splitMessages")
            .log(INFO, "Received Message : ${body}")
            .process(process3)
            .process(validate)
            .process(identity)
            .process(requestProcessor) //where the exception is thrown and the original message that is used in the exception handler is picking up
            .process(someService::gatewayResponseTimeStop)
            .process(someService::endToEndResponseStop)
            .process(someService::markGatewayDeliveryAsSuccess)
            .log("Completed processing...");

и вот мой обработчик исключений в том же классе:

    private void configureExceptionHandlers() {

        onException(ProviderException.class) //thrown when 500 error occurs
            .useOriginalMessage() //picks message in the form the process(requestProcessor) method recieves it instead of start of route
            .handled(true)
            .log(ERROR, LOGGER, EXCEPTION_MESSAGE_WITH_STACKTRACE)
            .to(DLQ);

1 Ответ

0 голосов
/ 29 мая 2020

Решено добавлением shareUnitOfWork

.split().method(activityMessageSplitter, "splitActivityMessages").shareUnitOfWork()
...