1

我正在使用 Apache camel 将一些 SOAP 消息从 A 路由到 B。

我想为某些特定路由添加日志记录,但问题是消息正文是一个流。

我的解决方案是将该流转换为字符串,然后将其发送到端点 B。

这似乎工作正常,但我不确定这种方法有多干净?

这就是我的路线现在的样子:

<route>
    <from uri="cxf:bean:ServiceA?dataFormat=MESSAGE" />
    <convertBodyTo type="java.lang.String"/>
    <to uri="log:my.company?level=WARN"/>
    <to ref="ServiceB" />
</route>

问题是我是否应该使用wireTap 和流缓存来复制流、将其转换为字符串、记录它并将另一个未触及的流发送到ServiceB。我找不到正确执行此操作的方法。这是我的尝试:

<route streamCache="true">
    <from uri="cxf:bean:ServiceA?dataFormat=MESSAGE" />
    <wireTap uri="log:my.company?level=WARN" /> <!-- how to convert this stream to a string? -->
    <to ref="ServiceB" />
</route>

你认为呢?WireTap还是上述解决方案?

4

1 回答 1

5

您可以在日志端点上启用 showStreams=true 选项。然后它也会记录流;并且您不需要在此之前转换身体。您仍然需要启用流缓存,以确保以后在继续处理消息时可以重新读取流。

从其文档中查看日志组件的选项:http: //camel.apache.org/log

于 2012-08-22T19:54:08.147 回答