使用负载均衡器时,我可以知道哪个端点最终成为目标吗?

时间:2014-03-26 05:48:26

标签: apache-camel

我有一个使用自定义负载均衡器的路由,

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获取端点。
我相信端点和处理器之间应该有一些关系
你能给我更多帮助吗? 感谢。

1 个答案:

答案 0 :(得分:2)

处理器是一个SendProcessor,您可以在其中获取将发送交换的端点。

if (foo instanceof SendProcessor) {
  SendProcessor send = (SendProcessor) foo;
  Endpoint dest = send.getDestination();
  ...
}