当前位置: 首页 > 知识库问答 >
问题:

基于AMQP的发布-订阅通道和消息转换

宰父阳焱
2023-03-14

我们在基于服务的应用程序中使用 作为一种事件总线。send方法和消息处理程序基于spring-messaging的message类(从Spring-Integration4.0(+)开始)。事件是对实体的更改,需要由其他服务接收。

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

  • 默认消息格式是序列化的Java对象。spring-amqp不仅序列化了我们的原始有效负载对象,而且还序列化了包装spring-messagingmessage,它在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)实现的服务。

有没有办法解决这个问题,最好是一种惯用的Spring集成方法?除了PublishSubscribeamQPChannel之外,是否还有其他抽象?或者我们可以应用的任何其他消息转换方法?

共有1个答案

胡鸿远
2023-03-14

不使用AMQP支持的通道,而是使用outbound-channel-adapter发送,使用inbound-channel-adapter接收。

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

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

 类似资料:
  • 我是新的数据流和发布子工具在GCP。 需要将prem过程中的电流迁移到GCP。 当前流程如下: 我们有两种类型的数据馈送 Full Feed–其adhoc作业–完整XML的大小约为100GB(单个XML–非常复杂的一个–完整的数据–ETL作业处理此XML并将其加载到约60个表中) 单独的ETL作业用于处理完整提要。ETL作业过程完全馈送并创建负载就绪文件,所有表将被截断并重新加载 源系统每30分钟

  • 主要内容:一、通知,二、源码分析,三、总结一、通知 在Redis中,既可以实现消息的发送又可以实现订阅,也就是常说的发布/订阅。它的主要逻辑实现在nofigy.c和module.c、pubsub.c中,其实通知做为一种辅助功能,是易用性的一种良好的接口。Redis的通知功能是一种即时在线通知功能,如果CS端断线后,相关的消息就无法再次通知,也就是说,消息机制没有保存和重发功能。这也是为了实现设计上的简单和功能实现的鲁棒性的考虑,至于以后会

  • 本文向大家介绍meteor 基本订阅和发布,包括了meteor 基本订阅和发布的使用技巧和注意事项,需要的朋友参考一下 示例 首先,删除autopublish。autopublish自动将整个数据库发布到客户端,因此无法看到发布和订阅的效果。 删除autopublish: 然后,您可以创建出版物。下面是一个完整的示例。            

  • 发布和订阅 Meteor 服务端可以通过Meteor.publish发布文档集,同时客户端可以通过Meteor.subscribe订阅这些发布。 任何客户端订阅的文档都可以通过find方法进行查询使用。 默认情况下,每个新创建的 Meteor 应用包含有 autopublish 包,它会自动为每个客户端发布所有可用的文档。 为了可以更细化的控制不同客户端所接收的数据文档,首先应该在终端移除 aut

  • 问题 你有一个基于线程通信的程序,想让它们实现发布/订阅模式的消息通信。 解决方案 要实现发布/订阅的消息通信模式, 你通常要引入一个单独的“交换机”或“网关”对象作为所有消息的中介。 也就是说,不直接将消息从一个任务发送到另一个,而是将其发送给交换机, 然后由交换机将它发送给一个或多个被关联任务。下面是一个非常简单的交换机实现例子: from collections import default

  • 微信文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.addTemplate.html 组合模板并添加至帐号下的个人模板库 $tid = 563; // 模板标题 id,可通过接口获取,也可登录小程序后台查看获取 $kidLi