1

基本上,我希望立即响应 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”,指向一个单独的骆驼上下文,但这没有帮助。

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

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

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

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

我必须使用 JMS 吗?

谢谢!

4

1 回答 1

0

您看到的行为是由于

.to("direct:ABCMessage");

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

于 2013-04-22T21:14:26.120 回答