我们在基于服务的应用程序中使用<int-amqp:publish-subscribe-channel/>
作为一种事件总线。 send方法和消息处理程序基于spring-messaging中的Message
类(从spring-integration 4.0(+)开始。事件是对需要由其他服务获取的实体的更改。< / p>
问题是:spring-messaging Message
类被spring-amqp视为任意对象有效负载,因为它不被识别为spring-amqp Message
。这会导致以下问题:
Message
,它在Spring Framework 4.0和4.1之间不兼容Jackson2JsonMessageConverter
)并不能解决问题,因为它还会转换Message
实例 - 这是spring-integration&#39; { {1}},由于缺少适当的构造函数,因此无法从JSON实例化我们需要混合使用Spring版本,因为我们使用Grails 2.4(基于Spring 4.0)和当前的Spring Boot(依赖于Spring 4.1)实现了服务。
有没有办法解决这个问题,最好采用惯用的弹簧整合方式?是否可能有另一种抽象而不是GenericMessage
?或者我们可以应用的任何其他消息转换方式?
答案 0 :(得分:0)
使用出站通道适配器发送和使用入站通道适配器代替使用amqp支持的通道。
通道保存整个消息(序列化),而适配器将有效负载作为消息体传输,并(可选)将标头映射到amqp标头或从amqp标头映射。
您需要为pub / sub配置扇出交换(默认情况下,该频道将创建一个名为si.fanout.<channelName>
的扇区。然后,您可以为每个收件人绑定一个队列。