截取路线而不跟踪

时间:2019-01-28 15:10:17

标签: apache-camel interceptor

我正在处理的应用程序是一个中间件应用程序,它允许在大量应用程序(主要是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 :(得分:0)

我不喜欢在此海豚上使用拦截器,建议您使用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等。