我正在使用http服务的撰写请求消息。
Order finalOrder = (Order) producerTemplate.requestBody("direct:processRequests", myOrder);
我用上面的代码调用路由。我知道requestBody()方法使用InOut模式。但是当我试图检查最终交换是否有消息时它是假的。
@Override
public void configure() throws Exception {
/*onException(Exception.class)
.handled(true);*/
from("direct:processRequests")
.split(body().method("getItems"), new GroupedBodyAggregationStrategy())
.parallelProcessing()
.to("direct:processRequest")
.end()
.end();
from("direct:processRequest")
.choice()
.when(body().method("getHttpDetails").method("getCallType").isEqualTo("POST"))
.setHeader(Exchange.HTTP_METHOD, body().method("getHttpDetails").method("getCallType"))
.setProperty("sendTo",body().method("getEndPointUri"))
.setBody(body().method("getPayload"))
.toD("${exchangeProperty.sendTo}")
}
}
我能够在In消息而不是Out中获得响应正文。我正在在aggreator类中进行交换。
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
if (oldExchange == null) {
System.out.println("hasout "+newExchange.hasOut());
// remaining code
newExchange.hasOut()始终为false.Message在In Messsage中传播。任何人都可以解释如何在Out Message中传播最终响应消息。 提前谢谢。
答案 0 :(得分:1)
如Camel Exchange文档中的Flow of an exchange through a route section所述:
每一步的输出消息用作下一步的消息 步骤
这可能就是您遇到问题的原因。根据我的经验,响应几乎从不在out消息中,我只是将其复制到out消息中,如下所示(如果需要):
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.setOut(exchange.getIn());
}
})
然而,通常没有必要这样做。
答案 1 :(得分:0)
您可能需要在D(..)调用之前将ExchangePattern设置为inOut:
.setExchangePattern(ExchangePattern.InOut)
.toD("${exchangeProperty.sendTo}")
另外,您是否尝试过使用recipientList?我只使用它来做你正在尝试做的事情,因为我正在运行旧版本的Camel。为此,您可以使用以下内容替换toD(..):
.setExchangePattern(ExchangePattern.InOut)
recipientList(simple("${exchangeProperty.sendTo}"))
如果这些方法中的任何一种都有效,请告诉我。