2012-04-03 144 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