2

Spring Integration & SI AMQP 3.0.0-RELEASE を使用しています。

2 つの SI インスタンス間で AMQP を介した非常に単純な Request-Response があります。

要求元のサーバーに応答が戻ってきたときに、SI が Response オブジェクトではなく Request オブジェクトの型を使用して応答を逆シリアル化しようとしていることがわかりました。

つまり、次のゲートウェイ インターフェイスが与えられます。

public AnalyticsReponse getAnalyticsReport(EntityMessage objectUri);

の正しい JSON がAnalyticsResponseサーバーに到着しても、SI はそれを としてデシリアライズしようとしていますが、EntityMessage失敗しています。

私はそれをデバッグしましたが、原因は、応答側が受信json__TypeId__ヘッダーを提供するのではなく、受信ヘッダーをコピーしていることであると思われます。ただし、これをどこで誤って構成したかはわかりません。

ここに私の設定があります - 私は何を間違えましたか?

依頼側:

<int:channel id="analytics.reports.requests.channel" /> 
<int:channel id="analytics.reports.responses.channel" />
<int:gateway service-interface="com.project.analytics.gateway.AnalyticsReportingGateway">
    <int:method name="getAnalyticsReport" request-channel="analytics.reports.requests.channel" reply-channel="analytics.reports.responses.channel"/>
</int:gateway>
<int-amqp:outbound-gateway 
    request-channel="analytics.reports.requests.channel" 
    reply-channel="analytics.reports.responses.channel"
    exchange-name="analytics.reports.exchange" amqp-template="amqpTemplate" />

応答側:

<int:channel id="analytics.reports.requests.channel" /> 
<int:channel id="analytics.reports.responses.channel" />    
<int-amqp:inbound-gateway request-channel="analytics.reports.requests.channel" reply-channel="analytics.reports.responses.channel"
    queue-names="analytics.reports.queue" connection-factory="rabbitConnectionFactory" message-converter="jsonMessageConverter"/>

<int:service-activator input-channel="analytics.reports.requests.channel" output-channel="analytics.reports.responses.channel" 
    ref="analyticsReporter" method="getAnalytics"/>
<bean class="com.project.analytics.reporters.SimpleAnalyticsReporter" id="analyticsReporter"/>


public class SimpleAnalyticsReporter {

@SneakyThrows
public AnalyticsReponse getAnalytics(EntityMessage message) {
    return new AnalyticsReponse("Hello");
 }
4

1 に答える 1

2

に関心がない限り、org.springframework.integration.mapping.support.JsonHeadersを使用しているためjsonMessageConverter、それらをフィルタリングする ( <header-filter>) か、すべての AMQP ヘッダーを完全に無視する (mapped-request-headers="-"またはmapped-reply-headers="-") 必要があります。

しかし、昨日 ( https://jira.springsource.org/browse/INT-3285 ) が正しくなかったことを確認し、問題を再度開いて、デフォルトで標準ヘッダーを処理して同様のシナリオを機能させる方法を修正します。ありがとうございました!

于 2014-02-06T08:08:14.227 に答える