我有一个使用自定义负载均衡器的路由,
from("timer://myTimer?period=2000")
.loadBalance(new MyCustomLoadBalancer())
.to("mock:em1").to("mock:em2").to("mock:em3")
.end();
在自定义平衡器类中,似乎只能获得处理器。
public class MyCustomLoadBalancer extends SimpleLoadBalancerSupport {
public void process(Exchange exchange) throws Exception {
List<Processor> pList = getProcessors();
.......
//It is wanted to log which endpoint is finally targeted.
foo.process(exchange);
}
}
但是在这里,我想在使用此负载均衡器时实际记录哪个端点是目标
在产品环境中,将使用Jetty或HTTP端点代替这些模拟端点。
有没有办法实现这个目标?
=============================================== ====================
根据易卜生的建议,我使用Jetty端点进行测试。
from("jetty:http://0.0.0.0:8043?matchOnUriPrefix=true")
.loadBalance(new MyCustomLoadBalancer())
.to("jetty:http://localhost:80?bridgeEndpoint=true&throwExceptionOnFailure=false")
.to("jetty:http://www.google.com?bridgeEndpoint=true&throwExceptionOnFailure=false")
.end();
但是处理器不是SendProcessor类(&#34; foo instanceof SendProcessor&#34;返回false),所以我无法通过getDestination获取端点。
我相信端点和处理器之间应该有一些关系
你能给我更多帮助吗?
感谢。
答案 0 :(得分:2)
处理器是一个SendProcessor,您可以在其中获取将发送交换的端点。
if (foo instanceof SendProcessor) {
SendProcessor send = (SendProcessor) foo;
Endpoint dest = send.getDestination();
...
}