小编tec*_*hon的帖子

使用Apache Camel请求回复和分散聚集

我正在尝试构建一条将执行以下操作的路线:

  1. 消费来自 jms:sender-in.我正在使用INOUT请求回复模式.该JMSReplyTo = sender-out
  2. 上述消息将被路由到多个接收者像jms:consumer1-in,jms:consumer2-injms:consumer3-in.所有人都在使用请求回复模式.在 JMSReplyTo每消费指定(在这种情况下,JMSReplyTo在这个顺序jms:consumer1-out, jms:consumer2-out, jms:consumer3-out
  3. 我需要将所有回复聚合在一起并将结果发送回去jms:sender-out.

我构建了一条类似于此的路线:

from("jms:sender-in")
    .to("jms:consumer1-in?exchangePattern=InOut&replyTo=queue:consumer1-out&preserveMessageQos=true")
    .to("jms:consumer2-in?exchangePattern=InOut&replyTo=queue:consumer2-out&preserveMessageQos=true")
    .to("jms:consumer3-in?exchangePattern=InOut&replyTo=queue:consumer3-out&preserveMessageQos=true");
Run Code Online (Sandbox Code Playgroud)

然后我将回复发送回某个队列以收集和聚合:

from("jms:consumer1-out?preserveMessageQos=true").to("jms:gather");
from("jms:consumer1-out?preserveMessageQos=true").to("jms:gather");
from("jms:consumer1-out?preserveMessageQos=true").to("jms:gather");
from("jms:gather").aggregate(header("TransactionID"), new GatherResponses()).completionSize(3).to("jms:sender-out");
Run Code Online (Sandbox Code Playgroud)

为了模仿我的消费者的行为,我添加了以下路线:

from("jms:consumer1-in").setBody(body());
from("jms:consumer2-in").setBody(body());
from("jms:consumer3-in").setBody(body());
Run Code Online (Sandbox Code Playgroud)

我有几个问题:

  1. 我在回复中收到超时错误.如果我评论聚集部分,那么没有问题.即使回复返回队列然后转发到另一个队列,为什么会有超时.
  2. 如何存储原始JMSReplyTo值,以便Camel能够将聚合结果发送回发送方的回复队列.

我有一种感觉,我正在努力解决一些基本概念.任何帮助表示赞赏.谢谢.

apache-camel

4
推荐指数
1
解决办法
1054
查看次数

标签 统计

apache-camel ×1