У меня есть один маршрут, который собирает заголовки и отправляет запрос в другую очередь, из которой я жду ответа (мне нужно только тело ответа).Проблема в том, что и заголовки, и ответ, который я хочу получить в одном сообщении по одному маршруту, но теперь я получаю два сообщения по одному маршруту (мне нужно объединить тело ответа и заголовки).как это сделать?
from("jms:queue:aaa")
.log("incoming message")
.process(exchange -> {
exchange.getIn().setHeader("c", c);
exchange.getIn().setHeader("d", d);
exchange.getIn().setHeader("a", a);
exchange.getIn().setHeader("b", b);
exchange.getIn().setBody("2+3");
})
.removeHeaders("*", "a", "b", "c", "d")
.setHeader("JMSReplyTo", simple("bbb"))
//send request
.to(ExchangePattern.InOnly, "jms:ccc?preserveMessageQos=true&includeSentJMSMessageID=true")
//trying to send headers from this route to bbb
.to(ExchangePattern.InOut, "jms:bbb")
.end();
from("jms:bbb")
.log("${headers}\n${}body")
.end();
из ("jms: bbb") это маршрут, по которому я хочу объединить результаты из.
.to(ExchangePattern.InOnly, "jms:ccc?preserveMessageQos=true& includeSentJMSMessageID=true")
.
и.
.to (ExchangePattern.InOut, "jms: bbb")
UPD:
public class AggregationStrategyImpl implements AggregationStrategy {
private static final Logger log = LoggerFactory.getLogger(AggregationStrategyImpl.class);
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
if(newExchange == null)
newExchange = oldExchange;
String a = oldExchange.getIn().getHeader("a", String.class);
String b = oldExchange.getIn().getHeader("b", String.class);
String c = oldExchange.getIn().getHeader("c", String.class);
String d = oldExchange.getIn().getHeader("d", String.class);
newExchange.getIn().setHeader("a", a);
newExchange.getIn().setHeader("b", b);
newExchange.getIn().setHeader("c", c);
newExchange.getIn().setHeader("d", d);
return newExchange;
}
}
.setHeader("JMSReplyTo", simple("bbb"))
.multicast(aggregationStrategy)
.to(ExchangePattern.InOnly, "jms:ccc?preserveMessageQos=true&includeSentJMSMessageID=true")
.to(ExchangePattern.OutOnly, "jms:bbb")