【发布时间】:2015-02-26 08:45:28
【问题描述】:
我们在基于服务的应用程序中使用<int-amqp:publish-subscribe-channel/> 作为一种事件总线。 send 方法和消息处理程序基于 spring-messaging 中的 Message 类(从 spring-integration 4.0 (+) 开始。事件是对需要由其他服务获取的实体的更改。
问题是:spring-messaging Message 类被 spring-amqp 视为任意对象有效负载,因为它不被识别为 spring-amqp Message。这会导致以下问题:
- 默认消息格式是序列化的 Java 对象。 spring-amqp 不仅序列化了我们原来的payload对象,还序列化了spring-messaging
Message,这在Spring Framework 4.0和4.1之间是不兼容的 - 为 JSON 配置消息转换器(确切地说是
Jackson2JsonMessageConverter)并不能解决问题,因为它还转换了Message实例 - 这是 spring-integration 的GenericMessage,并且无法实例化来自 JSON,因为它缺少适当的构造函数
我们需要混合使用 Spring 版本,因为我们使用 Grails 2.4(基于 Spring 4.0)和当前的 Spring Boot(依赖于 Spring 4.1)实现了服务。
有没有办法解决这个问题,最好是惯用的弹簧集成方式?除了PublishSubscribeAmqpChannel,是否还有其他抽象?或者我们可以应用的任何其他消息转换方式?
【问题讨论】:
标签: spring-integration spring-amqp