如何在调用其他处理时立即响应Camel中的SOAP消息?

时间:2013-04-22 19:27:56

标签: soap cxf apache-camel

基本上,我希望立即响应SOAP请求,但也开始进一步处理。我所看到的是,在路线结束之前不会发送响应。换句话说:

from("cxf:bean:someEndpoint")
    .to("seda:replySOAP")
    .to("direct:ABCMessage");
from("seda:replySOAP")
    .to("bean:soapReply?method=process").end();
from("direct:ABCMessage")
    .process(new ConvertABCToNZFCY())
    .to("bean:prelimNZFCYCall")
    .end();

直到“direct:ABCMessage”完成后才会生成响应。我认为seda会指定异步处理。我也试过“vm:replySOAP”,指向一个单独的Camel Context,这没有帮助。

我也试过多播,但无济于事:

from("cxf:bean:someEndpoint")
    .multicast().parallelProcessing()
    .to("seda:replySOAP")
    .to("direct:ABCMessage");

对我来说有用的是wireTap,但它看起来并不优雅:

from("cxf:bean:someEndpoint")
    .wireTap("direct:ABCMessage") 
    .to("direct:replySOAP");

我必须使用JMS吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您看到的行为是由于

.to("direct:ABCMessage");

在路线中。它是一个同步过程,即InOut交换模式。可以使用jms但如果你只是为了避免窃听而使用它可能是一种矫枉过正。为什么你认为窃听不太优雅。