Java apache mq-聚合器未从目标队列上的处理器接收更新的正文
我对这些家伙感到不知所措-不明白为什么我的聚合器没有从我聚合响应的目标队列上的处理器接收到我更新的消息正文。在目标队列的处理器中,主体被更新,我可以打印以控制台更新的主体,而不会出现问题。尽管如此,当我试图从聚合器打印以控制台消息体时,消息没有在处理器中进行的更新 这是我的路线:Java apache mq-聚合器未从目标队列上的处理器接收更新的正文,java,apache-camel,activemq,Java,Apache Camel,Activemq,我对这些家伙感到不知所措-不明白为什么我的聚合器没有从我聚合响应的目标队列上的处理器接收到我更新的消息正文。在目标队列的处理器中,主体被更新,我可以打印以控制台更新的主体,而不会出现问题。尽管如此,当我试图从聚合器打印以控制台消息体时,消息没有在处理器中进行的更新 这是我的路线: context.addRoutes(new RouteBuilder(){ public void configure(){ from("jms:queue:ready_fo
context.addRoutes(new RouteBuilder(){
public void configure(){
from("jms:queue:ready_for_test")
.multicast(new CompAggregationStrategy())
.parallelProcessing()
.to("jms:queue:test1", "jms:queue:test2", "jms:queue:test3")
.end()
.to("jms:queue:highest_value");
from("jms:queue:test1").process(new InstProcessor("Comp1"));
from("jms:queue:test2").process(new InstProcessor("Comp2"));
from("jms:queue:test3").process(new InstProcessor("Comp3"));
}
这是一个处理器:
public class InsuranceProcessor implements Processor{
private String providerName;
public InsuranceProcessor(String name) {
this.providerName = name;
}
public void process(Exchange e) throws Exception {
double rate = Double.MAX_VALUE;
String body = e.getIn().getBody(String.class);
String[] msgArray = body.split("|");
//do a bunch of stuff, removed for brevity
//this stuff calculates rate
//build out new exchange body
StringBuilder newExchange = new StringBuilder();
newExchange.append(body);
newExchange.append("|");
newExchange.append((int)rate);
//replace old exchange body with new exchange body
e.getIn().setBody(newExchange.toString());
//System.out.println(newExchange.toString()); //this displays correctly
}
}
和我的聚合器:
public class CompAggregationStrategy implements AggregationStrategy{
public Exchange aggregate(Exchange oldExchange, Exchange newExchange){
//should always be true on first response
if(oldExchange == null){
return newExchange;
}
//both of these lines outputting to console output my original message, without the rate appended to the msg
//System.out.println(newExchange.getIn().getBody(String.class));
//System.out.println(oldExchange.getIn().getBody(String.class));
Double oldQuote = Double.parseDouble(oldExchange.getIn().getBody(String.class).split("|")[11]);
Double newQuote = Double.parseDouble(newExchange.getIn().getBody(String.class).split("|")[11]);
if (oldQuote.doubleValue() <= newQuote.doubleValue()) {
return oldExchange;
} else {
return newExchange;
}
}
}
我一辈子都搞不懂这件事。非常感谢您的帮助。我不清楚问题出在哪里。描述中要讨论的目标队列是什么?目标队列是我向其发送消息以便使用multicastnew CompAggregationStrategy进行处理的多个测试队列。parallelProcessing.tojms:queue:test1、jms:queue:test2、jms:queue:Test3我看到了。我不经常使用InOut交换模式,但是您是否将交换模式设置为InOut,例如jms:MyQueue?exchangePattern=InOut。看见