我正在处理的应用程序是一个中间件应用程序,它允许在大量应用程序(主要是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响应主体的拦截器?
谢谢您的帮助。
答案 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等。