2012-04-03 146 views
3

我已經建立了一個簡單的動態路由器:瞭解Apache的駱駝動態路由

public String slip(String body, @Header(Exchange.SLIP_ENDPOINT) String previous) { 
       if (previous == null) { 
        return "mock:a"; 
       } 
        else if (body.contains("status=2")) { 
        return "mock:b"; 
       } 
        else if (body.contains("status=3")) { 
        return "mock:c"; 
       } 

       // no more so return null 
       return null; 
      } 

模擬A,B,C與定製處理器路線。

public void process(Exchange exchange) throws Exception { 
     String str_request = ""; 
     String str_requestNew = ""; 

     str_request = (String) exchange.getIn().getBody(); 

     if(str_request.contains("status=1")) 
      str_requestNew = "status=2"; 
    } 
  1. 我如何通過Java DSL我自定義的處理器更新路由之間的郵件正文。 exchange.getOut()。setBody(newreq); ?

  2. 我是否需要創建一個新的生產者並將消息發送回動態路由器? ProducerTemplate template = exchange.getContext()。createProducerTemplate(); template.sendBody(myDynamicRouterEndpoint,newreq); 或將我的路由器,如果做到這一點通過方法1.

還是有我的邏輯巨大的缺陷一起拿起新的身體? :)

回答

3

就像你在1

描述,如果你使用bean組件那麼就更簡單了,您可以做到這一點。然後你就可以有閱讀和定身一個普通的Java方法:

公共字符串DoSomething的(字符串體){ }

這將讓身在參數和返回值將是新體。這也使得你的bean獨立於駱駝。

+0

好的。謝謝。我是否必須通過「to(routerEndpoint)」路由回動態路由器,或者只要更新主體,駱駝就會自動執行此操作? – esimran 2012-04-04 17:49:27

+0

是駱駝繼續調用動態路由器,直到你的bean返回null。空是動態路由的信號,它完成了。如果您有駱駝行動書的副本,那麼請參閱第8章涵蓋此模式的地方,並且我們在源代碼中也有許多示例可供您查看。 Apache的文檔也有一些報道和例子:http://camel.apache.org/dynamic-router – 2012-04-05 10:10:55