2

私のキャメルルートは次のとおりです(サンプル)

from (activemq:xyz) --- QUEUE からメッセージを受信

to(smpp:abc) --- メッセージを SMSC に送信します

to(cxf:hij) --- Web サービスの呼び出しに成功した SMSC 応答に基づく

私が直面している問題は以下の通りです

キューから受信した交換プロパティ/ヘッダーはほとんどありませんが、SMPP からの応答を受信した後、送信した交換ヘッダー/プロパティがクリアされ、Web サービスを呼び出すことができません。ルートの終わりに到達するまで、これらの値をそのままにしておくにはどうすればよいですか。私は SMSC の実装を制御できず、SMSC 応答を変更できません。SPRING DSL を使用しています

4

2 に答える 2

0

Bean を使用して、保持したいヘッダーとプロパティをスレッド ローカル メンバーに格納できます。すべてのヘッダー/プロパティを保持および復元する簡単な例は、次のようになります。

public class BeanToHoldHeadersAndProps {
    ThreadLocal<Map<String,Object>> headers = new ThreadLocal<>();
    ThreadLocal<Map<String,Object>> props = new ThreadLocal<>();

    public void saveHeaders(Exchange exchange) {
        headers.set(exchange.getIn().getHeaders());
        props.set(exchange.getProperties());
    }

    public void restoreHeaders(Exchange exchange) {
        exchange.getIn().setHeaders(headers.get());
        exchange.getProperties().putAll(props.get());
    }
}

ルート:

<camel:route id="header_preserving_route">
    <camel:from url="activemq:xyz" />
    <camel:bean ref="headerPreserver" method="saveHeaders" />
    <camel:to url="smpp:abc" />
    <camel:bean ref="headerPreserver" method="restoreHeaders" />
    <camel:to url="cxf:hij" />
</camel:route>

要件に応じて、引き継がれる 3 番目の要素があります。これは、交換の添付ファイルです。

于 2014-01-09T08:26:48.323 に答える