使用Apache Camel我想将文件发送到FTP服务器,如果此服务器变得无法访问,那么我想发送文件到备份FTP服务器。我与负载平衡器如何在Apache骆驼中记录负载均衡器的真正目标端点
<route id="ftp.failover">
<from uri="file:/path/to/files"/>
<loadBalance inheritErrorHandler="false">
<failover roundRobin="false" sticky="false"/>
<to uri="ftp://ftp_host"/>
<to uri="ftp://backup_ftp_host"/>
</loadBalance>
<log message="Sent ${headers}"/>
</route>
做到现在,我要在日志中查看到FTP服务器上的每个文件被送到且仅当它被发送。不幸的是,我的<log />
消息不显示关于目的地的任何信息。我想我需要在日志消息中添加一些$ {out.header.foo},但我无法想象我应该指定哪个头名称而不是foo。 所以这个问题:有没有一种方法来记录真正的目的地的情况下在Apache驼峰的负载平衡?
修订:[溶液]
由于Vimsha,溶液呈简单。我只想提到一件事情:CamelInterceptedEndpoint头像没有消毒一样填充,以便密码在uri中显示。额外的日志条目也轻微污染日志文件。所以,而不是<log />
我只是重写CamelInterceptedEndpoint标题。
<interceptSendToEndpoint uri="ftp:*">
<setHeader headerName="CamelInterceptedEndpoint">
<simple>${headers.CamelInterceptedEndpoint.replaceAll("\?.*","")}</simple>
</setHeader>
</interceptSendToEndpoint>
之后,我的初始路线开始记录真正的目的地。
此外,也可以简单地消毒URI:
<setHeader headerName="CamelInterceptedEndpoint">
<javaScript>
org.apache.camel.util.URISupport.sanitizeUri(request.headers.get('CamelInterceptedEndpoint'))
</javaScript>
</setHeader>
可能有调用骆驼的方法,但JavaScript的更方便的方法更简单给我。
我没有看到任何头被负载均衡器设置日志。一个简单的方法是将你的两个目的地作为微小的“直接”路线包装,分两步进行:logging和ftp。 –