1

Spring Integration と Spring Integration AMQP は初めてです。

次のコードがあります。

<bean id="enricher" class="soft.Enricher"/>

<amqp:inbound-channel-adapter queue-names="QUEUE1" channel="amqpInboundChannel"/>

<int:channel id="amqpInboundChannel">
    <int:interceptors>
        <int:wire-tap channel="logger"/>
    </int:interceptors>
</int:channel>

<int:header-enricher input-channel="amqpInboundChannel" output-channel="routingChannel">
        <int:header name="store" value="sj" />
</int:header-enricher>

<int:channel id="routingChannel" />

<int:header-value-router input-channel="routingChannel" header-name="store">
    <int:mapping value="sj" channel="channelSJ" />
    <int:mapping value="jy" channel="channelJY" />
</int:header-value-router>

<amqp:outbound-channel-adapter channel="channelSJ" exchange-name="ex_store" routing-key="sj" amqp-template="rabbitTemplate"/>
<amqp:outbound-channel-adapter channel="channelJY" exchange-name="ex_store" routing-key="jy" amqp-template="rabbitTemplate"/>

<int:channel id="channelSJ" />
<int:channel id="channelJY" />

<int:logging-channel-adapter id="logger" level="ERROR" />

セットアップは次のとおりです。

マイセットアップ

メッセージが inbound-channel-adapter によって取得されたときにヘッダーが失われることを除いて、すべてが正常に機能しています。

同様に、メッセージが outbound-channel-adapter を使用して取引所に送信されると、「ストア」と呼ばれる強化されたヘッダーも失われます。

これは、inbound-channel-adapter によって取得される前のメッセージの外観です。

前

これは、同じメッセージがプロセス全体を処理する方法です (ヘッダーがないことに注意してください)。

後

4

1 に答える 1

8

あなたの問題はここで説明されていると思います:

"デフォルトでは、標準の AMQP プロパティ (contentType など) のみが Spring Integration MessageHeaders との間でコピーされます。AMQP MessageProperties 内のユーザー定義ヘッダーは、「requestHeaderNames」および/またはによって明示的に識別されない限り、AMQP メッセージとの間でコピーされません。この HeaderMapper の 'replyHeaderNames' プロパティ。すべてのユーザー定義ヘッダーをコピーする必要がある場合は、単純にワイルドカード文字 ' '.*"を使用してください。

そのため、独自のカスタム インスタンスを定義し、それDefaultAmqpHeaderMapperを使用して構成する必要がありますinbound-channel-adapterここを参照してください。

次のようになります。

        <bean id="myHeaderMapper" class="org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper">
                    <property name="requestHeaderNames" value="*"/>
                    <property name="replyHeaderNames" value="*"/>
        </bean>

        <amqp:inbound-channel-adapter queue-names="QUEUE1" channel="amqpInboundChannel"
                                      header-mapper="myHeaderMapper"/>
于 2013-11-02T15:22:19.723 に答える