【问题标题】:How to Implement Request Reply pattern如何实现请求回复模式
【发布时间】:2013-04-22 02:00:59
【问题描述】:

我正在尝试使用 Camel、Spring 和 ActiveMQ 实现 request-reply pattern。 我需要做的是逐行读取 CSV 文件。 然后对于每一行:

  1. 根据 CSV 中的行值构造请求
  2. 将请求发送到队列
  3. 其他组件需要接收消息,处理请求并将响应发送到另一个消息队列(生产者知道,因此生产者可以接收响应)。

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

我的问题是:

  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"));
            }
        });
    }
}

【问题讨论】:

标签: java design-patterns activemq message-queue apache-camel


【解决方案1】:

如果传入的 JMS 消息上设置了 JMSReplyTo,Camel 会自动返回响应。因此,在您的第二条路由中,当消息到达路由的末尾时,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。它向您介绍页面上有关请求/回复的详细信息的部分。所以去读吧。

【讨论】:

  • 谢谢!在阅读了您提到的所有文档后,我仍然无法理解我需要在第一个根目录上添加什么才能在响应到达时运行一些代码。有什么提示吗?
  • 只需在inOut之后的路由中添加更多内容,例如.inOut("activemq:req").process(...)...
猜你喜欢
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 2013-04-21
  • 2018-05-14
  • 2016-11-24
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
相关资源
最近更新 更多