Перехватывать маршруты без трассировки - PullRequest
0 голосов
/ 28 января 2019

Приложение, над которым я работаю, является приложением промежуточного программного обеспечения, которое позволяет выполнять маршрутизацию среди множества приложений (в основном SOAP-сервисов).Мы столкнулись с насыщением из-за автоматических журналов, генерируемых Camel.

Объем журналов был уменьшен с новыми перехватчиками.Однако, если служба вызывается внутри текущего маршрута, все, что я получил, это тело запроса от перехватчика SendToEndpoint.

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

Старые перехватчики:

            getContext().setTracing(true); // <--- trace every step of all routes
            interceptFrom().to("log:example");

            configureRoutes() {
            // route logic
            }

Новые перехватчики:

            getContext().setTracing(false);
            interceptFrom("cxf:*").to("log:example");
            interceptSendToEndpoint("cxf:*").to("log:example");

            configureRoutes() {
            // route logic
            }

Пример маршрута:

            from("scheduler endpoint")
                .to("DAO method to find the case from database")
                .process(//First processor to call the SOAP service)
                .to("SOAP endpoint")
                .convertBodyTo(SOAP ResponseBody.class) <-- convert the MessageContentsList to SOAP response body generated from the WSDL
                .process(//Second processor to check if the response code is OK in the SOAP response body);

Как реализоватьперехватчик, который позволяет также регистрировать тело ответа SOAP?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 06 февраля 2019

Мне не нравится использовать перехватчики для этой морской свиньи, я предлагаю вам использовать интерфейс EventNotifier, вам просто нужно объявить его как bean-компонент в контексте верблюда и переопределить метод notify.

См .: https://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/spi/EventNotifier.html

Вот пример использования: http://camel.apache.org/eventnotifier-to-log-details-about-all-sent-exchanges.html

Примечание. У Camel есть несколько событий, которые вы можете использовать, например: CamelContextCreated, ExchangeCreatedEvent, ExchangeSendingEvent, ExchangeSentEvent, ExchangeCompletedEvent, ExchangeFailedEvent и т. Д.

...