首页 > 其他分享 >RabbitMQ 入门(三)SpringAMQP消息转换器

RabbitMQ 入门(三)SpringAMQP消息转换器

时间:2024-10-26 21:59:24浏览次数:1  
标签:SpringAMQP MessageConverter 步骤 object RabbitMQ queue 消息 转换器 序列化

  一、消息转换器


Spring会把你发送的消息序列化为字节发送给MQ,接收消息的时候,还会把字节反序列化为Java对象。
只不过,默认情况下Spring采用的序列化方式是JDK序列化。众所周知,JDK序列化存在下列问题:

- 数据体积过大
- 有安全漏洞
- 可读性差

JDK序列化方式并不合适。我们希望消息体的体积更小、可读性更高,因此可以使用JSON方式来做序列化和反序列化。

  二、实现JSON消息转换器

spring 的对消息对象的处理是由org.springframework.amqp.support.converter.MessageConverter来处理的.而默认实现是SimpleMeaasgeConverter,基于JDK的ObjectOutputStream完成序列化。

如果要修改只需要定义一个MessageConverter类型的Bean即可.推荐使用JSON方式序列化,步骤如下:

步骤一:
我们在publisher服务和consumer服务的父工程引入依赖:

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

 

步骤二:
我们在publisher服务声明MessageConverter:

    @Bean
    public MessageConverter essageConverter(){
        return new Jackson2JsonMessageConverter();
    }

 

 

步骤三:
我们在consumer服务定义MessageConverter

    @Bean
    public MessageConverter jsonMessageConverter(){
        return new Jackson2JsonMessageConverter();
    }

 


步骤四:

定义生产者,向object.queue队列发送消息

    @Test
    public void testSendObjectQueue() {
   
        Map<String, Object> map = new HashMap<>();
        map.put("name","张三");
        map.put("age",21);
        // 发送消息
        rabbitTemplate.convertAndSend( "object.queue", map);
    }

 


步骤五:
然后定义一个消费者,监听object.queue队列并消费信息:

    @RabbitListener(queues = "object.queue")
    public void listenObjectQueue(Map<String,Object> msg){
        System.out.println("接收到object.queue的消息:" + msg);
    }

 


注意:发送方与接收方必须使用相同的MessageConverter。

运行测试:

发送消息后查看控制台:

数据格式为:content_type:application/json

标签:SpringAMQP,MessageConverter,步骤,object,RabbitMQ,queue,消息,转换器,序列化
From: https://www.cnblogs.com/kongsq/p/18504628

相关文章

  • 明达技术MG协议转换器:高效连接,智控未来
    在当今自动化和工业4.0浪潮中,设备间的无缝连接和数据高效传输成为提升生产效率、保障系统稳定运行的关键。明达技术,凭借其在工业自动化领域的深厚积累与创新精神,推出了MG系列一体式协议转换器,为不同协议总线之间的通讯架起了一座坚实的桥梁。产品亮点MG协议转换器其体积小巧、应用......
  • <Project-11 Calculator> 计算器 0.5 液体、长度、温度单位 转换器 liquid_measures HTM
    前言这是一个综合性的单位换算工具,提供了多种常用计量单位之间的转换功能。不断完善style各页面风格统一,格式一致。容量单位换算支持在公制单位(升、毫升、立方厘米)美制容量单位(加仑、夸脱、品脱、杯、液体盎司)厨房计量单位(汤匙、茶匙、米杯)之间相互转换长度单位换算公......
  • Spring Boot 集成 RabbitMQ 完整教程(含 Windows 安装 RabbitMQ)
    在现代分布式系统中,消息队列是一种非常重要的组件,用于解耦应用程序的各个部分、异步处理任务、提高系统的可扩展性和容错性。RabbitMQ是一种流行的消息队列中间件,支持多种消息协议,其中AMQP(AdvancedMessageQueuingProtocol)是其默认支持的协议。本文将详细介绍如何在Wi......
  • centos7.8 安装Rabbitmq
    一、安装erlang1.安装epcl存储库命名:yum-yinstallepel-release2.安装erland命令:sudoyuminstallerlang3.erl-version二、安装socatyuminstall-ysocat 三、安装rabbitmqyuminstallrabbitmq-server-ysystemctlstartrabbitmq-serversystemctlstatusrabbit......
  • 延时队列(RabbitMQ)
    1.概述延时任务,也叫延迟任务延迟队列:没有固定的开始时间,它常常是由一个事件触发的,而在这个事件触发之后的一段时间内触发另一个事件,任务可以立即执行,也可以延迟。2.技术选型RabbitMQ(死信交换机)实现方式TTL+私信交换机1.概述死信队列:存放死信的队列死信交换机:绑定死信队列......
  • 常用的 RabbitMQ 插件
    RabbitMQ支持许多插件,这些插件可以扩展RabbitMQ的功能和特性。以下是一些常用的RabbitMQ插件:1、ManagementPlugin:RabbitMQ管理插件提供了一个Web管理界面,用于监控和管理RabbitMQ服务器。可以查看队列、交换机、连接、通道等的状态,并进行配置和操作。2、ShovelPlugi......
  • 汽车级DC-DC转换器英飞凌TLF35584
    上汽荣威都在用的汽车级DC-DC转换器英飞凌TLF35584今天平台君从IPBrain数据库中给大家带来的一款由Infineon(英飞凌)推出的一款多路输出安全电源芯片,具备高可靠性和安全性。适用于汽车电子系统中的多种应用场景,如车身控制、安全气囊、防抱死制动系统,电子稳定控制系统等。......
  • RAW 转换器推荐:Capture One Studo 中文激活版
    CaptureOneStudio是一款专为摄影师设计的强大图像处理软件,它以其卓越的RAW格式处理能力和精准的色彩控制而闻名。该软件提供了丰富的编辑工具,使用户能够轻松调整曝光、对比度、色彩平衡等参数,同时支持多种相机型号的RAW文件格式,确保完美处理各类摄影作品。CaptureOneStudi......
  • RabbitMQ总结
    重试机制背景线上的系统(SpringBoot2.2.11,rabbitmq为3.2.0),某一天突然有大量的错误日志写入,进几台服务器的硬盘都写满了。查看日志发现是RabbitMQ的消费者在接收消息消费时,抛出了异常错误,此时会不断重新进入消费重新打印错误日志,循环如此进硬盘写满了。RabbitMQ的消息重试机......
  • 在使用 RabbitMQ 作为消息代理时,多个 Celery 实例(或应用)可以共享同一个 RabbitMQ 实例
    在使用RabbitMQ作为消息代理时,多个Celery实例(或应用)可以共享同一个RabbitMQ实例。这样做可以简化基础设施管理,同时允许不同的Celery应用之间进行消息传递和协作。下面是如何配置多个Celery实例以使用同一个RabbitMQ实例的步骤:1.安装依赖确保你的Python环......