2014-03-26 29 views
1

我使用自定義負載平衡器使用負載平衡器時,我可以知道哪個端點最終成爲目標嗎?

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的(「富的instanceof SendProcessor」返回false),所以我不能getDestination得到端點。
我相信端點和處理器之間應該有一些關係。

你能給我更多幫助嗎?
謝謝。

回答

2

處理器是一個SendProcessor,您可以在其中獲取將要發送交換的端點。

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

感謝您的快速回復。 我想在真正的Jetty端點上做一些測試。 – paeps

+0

嗨易卜生, 這可能讓所有包含端點實例在負載平衡器?我認爲負載均衡器實例就像一個容器。 另外,是否有可能獲得端點實例使用的相應處理器實例? 如果這些工作,問題也可以解決。 – paeps

+0

與Jetty端點關聯的處理器不是SendProcessor的實例;我未能通過您建議的方法獲取端點。 我希望負載平衡器記錄每個端點的狀態。所以用戶可以很容易地知道哪個服務存在問題。 – paeps

相關問題