使用ActiveMQ,Camel和Spring实现Request-Reply模式
我正在尝试实现以下function:
然后逐行读取CSV文件:
- 根据该行包含的值构建请求
- 将请求发送到消息队列
- 其他组件需要接收消息,处理请求并将响应发送到另一个消息队列(生产者已知,因此生产者可以获取响应)。
我相信请求 – 回复模式适合该法案。 我安装了ActiveMQ,下载了camel并尝试使用他们的jms项目。
配置组件,队列和测试连接(工作)后,我试图弄清楚实际上如何实现请求 – 回复? 我没有找到任何好的例子
我有一个RouteBuilder
RouteBuilder
public class MyRouteBuilder extends RouteBuilder { public static void main(String[] args) throws Exception { new Main().run(args); } public void configure() { from("file:src/data?noop=true") .to("activemq:RequestQ"); from("activemq:RequestQ?exchangePattern=InOut&timeToLive=5000") .inOut("activemq:RequestQ", "bean:myBean?method=someMethod"); } }
骆驼的context.xml
org.apache.camel.example.spring
问题:
- 如何读取文件逐行构造并根据行内容发布消息?
- 如何配置路由以及如何配置邮件头以便在获取响应后将被删除的临时队列中获取响应?
- 您可以推荐哪些快速入门指南?
编辑
我得到了下面的代码。 现在让我们说在处理器中我创建响应。 我该如何寄回? 我该如何使用响应?
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")); } }); } }
我刚才有类似的东西,所以我改了它,就在这里。 请注意,第二条路径不需要明确知道请求/回复消息,只有生产者需要知道。 如果有对目的地集的回复(由驼峰自动处理),第二条路线将回复。
我不知道有什么好的例子,但是这个doc页面非常全面,只有很少的例子。
Hello ${in.body}