【问题标题】:Spring Integration AMQP - Wrong JSON type on ResponseSpring Integration AMQP - 响应中的 JSON 类型错误
【发布时间】:2014-03-02 23:08:48
【问题描述】:

我正在使用 Spring Integration 和 SI AMQP 3.0.0-RELEASE。

我在两个 SI 实例之间通过 AMQP 有一个相当简单的请求-响应。

我发现当响应返回到请求服务器时,SI 正尝试使用 Request 对象的类型而不是 Response 对象来反序列化响应。

即,给定网关接口:

public AnalyticsReponse getAnalyticsReport(EntityMessage objectUri);

我发现即使 AnalyticsResponse 的正确 JSON 到达服务器,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");
 }

【问题讨论】:

    标签: java spring spring-integration spring-amqp


    【解决方案1】:

    只要您对org.springframework.integration.mapping.support.JsonHeaders 不感兴趣,因为您使用jsonMessageConverter,您应该过滤它们(&lt;header-filter&gt;)或完全忽略所有AMQP 标头(mapped-request-headers="-"mapped-reply-headers="-")。

    但是我发现我昨天做的不对 (https://jira.springsource.org/browse/INT-3285) 并重新打开该问题以修改我们如何在默认情况下处理标准标头以允许处理类似的情况。 谢谢!

    【讨论】:

      猜你喜欢
      • 2023-01-14
      • 2016-03-30
      • 2016-02-28
      • 2015-06-02
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      相关资源
      最近更新 更多