Camel CXF エンドポンを設定し、SOAP 応答を Camel Route の多くに対して非同期にしたいと考えています。ルートには多くの処理ステップがあり、最後に応答を生成したくありません。
エンドポイントの例:
<cxf:cxfEndpoint id="someEndpoint"
address="/Service"
serviceClass="com.SomeImpl" />
ルートの例:
public class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("cxf:bean:someEndpoint")
to("bean:processingStep1")
to("bean:replyToSOAP") // I would like to respond to cxf:cxfEndpoint here!
to("bean:processingStep2")
to("bean:processingStep3")
to("bean:processingStep4");
// The response to cxf:cxfEndpoint actually happens here.
}
}
MyRouteBuilder でプロセスを「フォーク」するために多くのオプションを試しました (つまり、bean:replyToSOAP):
- .multicast().parallelProcessing()
- インメモリ非同期メッセージング (「seda」および「vm」)
- JMS は試していません。私がやりたいことにはやり過ぎかもしれません。
並行して処理するルート ステップを取得できますが、応答が生成される前にすべてのステップを完了する必要があります。
以下のClausの回答に加えて、wireTapの配置が重要であることを付け加えたいと思います。使用:
.wireTap("bean:replyToSOAP")
望ましい動作が得られません。とは:
public class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("cxf:bean:someEndpoint")
to("bean:processingStep1")
.wireTap("direct:furtherProcessing")
to("bean:replyToSOAP") // respond to cxf:cxfEndpoint here
from("direct:furtherProcessing") // steps happen independantly of beann:replyToSOAP
to("bean:processingStep2")
to("bean:processingStep3")
to("bean:processingStep4");
}
}