2013-04-28 41 views
0

我正在尝试使用Camel,Spring和ActiveMQ来实现request-reply pattern。 我需要做的是逐行读取CSV文件。 然后,对于每一行:基于线的值从CSV 如何实现请求应答模式

    1. 构建请求将请求发送给队列
    2. 其他组件需要拿起消息,处理请求,并发送该响应另一个消息队列(生产者已知,所以生产者可以选择响应)。

    我得到了下面的代码工作。 现在让我们说在处理器中创建响应。

    我的问题是:

    1. 我怎样才能将响应发送回来?
    2. 如何消费回应?

    public class MyRouteBuilder extends RouteBuilder { 
    
        public static void main(String[] args) throws Exception { 
         new Main().run(args); 
        } 
    
        public void configure() { 
         from("file:/Users/aviad/ws/integ/src/data?fileName=lines.txt&noop=true&idempotent=true") 
         .split() 
         .tokenize("\\n") 
         .inOut("activemq:req"); 
    
         from("activemq:req") 
         .process(new Processor() { 
          public void process(Exchange exchange) throws Exception { 
           System.out.println(exchange.getIn().getBody(String.class)); 
           System.out.println("jmscorrelationid=" + exchange.getIn().getHeader("jmscorrelationid")); 
           System.out.println("jmsdestination=" + exchange.getIn().getHeader("jmsdestination")); 
          } 
         }); 
        } 
    } 
    
  • +0

    [使用ActiveMQ,Camel和Spring的实现请求 - 回复模式]的可能的重复(http://stackoverflow.com/questions/16243433/implement-request-reply-pattern-using-activemq-camel-and-spring) – 2013-04-28 10:12:48

    +0

    不是重复。更具体一些。 – aviad 2013-04-28 10:30:36

    回答

    2

    骆驼发送自动回一个响应,如果有一个JMSReplyTo对传入JMS消息设置。因此,在第二条路由中,当消息到达路由末尾时,JMS消费者将使用给定的JMSCorrelationID将“正如其当前所在”消息作为回复消息发送回JMSReplyTo目的地。

    您可以在JMS端点上设置多个选项来禁用自动发回应答。或者指定一个指定的回复队列等。请参阅JMS页面的所有选项:http://camel.apache.org/jms

    当您从第一条路线使用inOut时,Camel将通过JMS执行请求回复。并且默认情况下它使用临时队列。但是你也可以告诉Camel使用命名队列(我们称之为固定队列)。请参阅JMS文档:http://camel.apache.org/jms

    并注意JMS页面顶部的提示:http://camel.apache.org/jms。它会将您引向页面上有关请求/回复详细信息的部分。所以请阅读。

    +0

    谢谢!读完所有你提到的文档后,我仍然不明白我需要在第一个根上添加什么,以便能够在响应到达时运行一些代码。任何提示? – aviad 2013-04-29 10:58:20

    +0

    只需在inOut之后添加更多路线,例如.inOut(“activemq:req”)。process(...)... – 2013-04-29 11:36:00

    +0

    了解它.cheers mate!顺便说一句:好书:) – aviad 2013-04-29 13:20:43