AMQP支持的发布 - 订阅频道和消息转换

时间:2015-02-26 08:45:29

标签: spring-integration spring-amqp

我们在基于服务的应用程序中使用<int-amqp:publish-subscribe-channel/>作为一种事件总线。 send方法和消息处理程序基于spring-messaging中的Message类(从spring-integration 4.0(+)开始。事件是对需要由其他服务获取的实体的更改。< / p>

问题是:spring-messaging Message类被spring-amqp视为任意对象有效负载,因为它不被识别为spring-amqp Message。这会导致以下问题:

  • 默认消息格式是序列化的Java对象。 spring-amqp不仅仅序列化我们的原始有效负载对象,而且还包含spring Spring-messaging Message,它在Spring Framework 4.0和4.1之间不兼容
  • 为JSON配置消息转换器(确切地说Jackson2JsonMessageConverter)并不能解决问题,因为它还会转换Message实例 - 这是spring-integration&#39; { {1}},由于缺少适当的构造函数,因此无法从JSON实例化

我们需要混合使用Spring版本,因为我们使用Grails 2.4(基于Spring 4.0)和当前的Spring Boot(依赖于Spring 4.1)实现了服务。

有没有办法解决这个问题,最好采用惯用的弹簧整合方式?是否可能有另一种抽象而不是GenericMessage?或者我们可以应用的任何其他消息转换方式?

1 个答案:

答案 0 :(得分:0)

使用出站通道适配器发送和使用入站通道适配器代替使用amqp支持的通道。

通道保存整个消息(序列化),而适配器将有效负载作为消息体传输,并(可选)将标头映射到amqp标头或从amqp标头映射。

您需要为pub / sub配置扇出交换(默认情况下,该频道将创建一个名为si.fanout.<channelName>的扇区。然后,您可以为每个收件人绑定一个队列。