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");
}