如何使用 Camel / Wire Tap 记录审核响应?
How to log an audit response using Camel / Wire Tap?
我们有一个审计Servlet路由的需求。
我们研究过使用 Wire Tap,它会 Post 向单独的审核端点发出新的 HTTP 请求。
我们使用 Wire Tap 的原因是我们不会阻止 Servlet 路由。
我们的问题是我们需要记录来自审核端点的 HTTP 响应。我们的理解是 Wire Tap 组件是 InOnly,因此不会捕获响应。
我们目前的想法是在窃听之后将审核请求推送到队列中。然后我们将从队列中取出请求并调用审计端点记录响应。
这是最好的方法还是有更好的方法?
我们可以使用 "setExchangePattern" 制作 Wire Tap InOut 吗?如果是这样会不会堵住主干道?
我们已经看到有一个 OnCompletion 处理程序,但不确定它是否对我们有用。又会不会堵住主干道?
窃听器正在窃听 当前 消息。因此,您可以在路由末端使用窃听器,假设 current 消息就是响应。
为此,您还可以使用最后触发的 on completion,但如果它更通用并适用于更多路由等,您可以使用 on completion
请注意,窃听是异步的,并且在单独的线程中路由消息,然后您可以并发访问来自编写响应的消费者的消息,以及何时进行审核。如果您不需要异步,您可以跳过窃听并直接在路由的末尾路由到审计。
我们似乎已经解决了这个问题,方法是将 Wire Tap 指向直接路由,然后调用审计端点并记录响应。
这允许我们在异步记录审计响应的同时仍然传回主要的 outgoingEndpoint 响应。
<from uri="servlet:///incomingendpoint matchOnUriPrefix=true&servletName=IncomingServlet" />
<to ref="outgoingEndpoint" />
<log id="outgoingEndpointLog" message="\nPre Wire Tap Log:[id = ${id}]\n [body = ${body}]\n [headers = ${headers}]\n" ... />
<wireTap uri="direct:tapAuditEndpoint" processorRef="headerProcessor" />
<route id="tapAuditRoute">
<from uri="direct:tapAuditEndpoint"/>
<to uri="auditEndpoint"/>
<log id="auditEndpointLog" message="\nAudit Response Log:[id = ${id}]\n [body = ${body}]\n [headers = ${headers}]\n" ... />
</route>
我们有一个审计Servlet路由的需求。
我们研究过使用 Wire Tap,它会 Post 向单独的审核端点发出新的 HTTP 请求。
我们使用 Wire Tap 的原因是我们不会阻止 Servlet 路由。
我们的问题是我们需要记录来自审核端点的 HTTP 响应。我们的理解是 Wire Tap 组件是 InOnly,因此不会捕获响应。
我们目前的想法是在窃听之后将审核请求推送到队列中。然后我们将从队列中取出请求并调用审计端点记录响应。
这是最好的方法还是有更好的方法?
我们可以使用 "setExchangePattern" 制作 Wire Tap InOut 吗?如果是这样会不会堵住主干道?
我们已经看到有一个 OnCompletion 处理程序,但不确定它是否对我们有用。又会不会堵住主干道?
窃听器正在窃听 当前 消息。因此,您可以在路由末端使用窃听器,假设 current 消息就是响应。
为此,您还可以使用最后触发的 on completion,但如果它更通用并适用于更多路由等,您可以使用 on completion
请注意,窃听是异步的,并且在单独的线程中路由消息,然后您可以并发访问来自编写响应的消费者的消息,以及何时进行审核。如果您不需要异步,您可以跳过窃听并直接在路由的末尾路由到审计。
我们似乎已经解决了这个问题,方法是将 Wire Tap 指向直接路由,然后调用审计端点并记录响应。
这允许我们在异步记录审计响应的同时仍然传回主要的 outgoingEndpoint 响应。
<from uri="servlet:///incomingendpoint matchOnUriPrefix=true&servletName=IncomingServlet" />
<to ref="outgoingEndpoint" />
<log id="outgoingEndpointLog" message="\nPre Wire Tap Log:[id = ${id}]\n [body = ${body}]\n [headers = ${headers}]\n" ... />
<wireTap uri="direct:tapAuditEndpoint" processorRef="headerProcessor" />
<route id="tapAuditRoute">
<from uri="direct:tapAuditEndpoint"/>
<to uri="auditEndpoint"/>
<log id="auditEndpointLog" message="\nAudit Response Log:[id = ${id}]\n [body = ${body}]\n [headers = ${headers}]\n" ... />
</route>