SpringBoot之RabbitMQ的消息发布与接收(Docker)

SpingBoot集成Rabbitmq及Docker部署 RabbitMQ是由Erlang语言开发的AMQP的开源实现AMQP:Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。 阅读详情

安装RabbitMQ

在Docker中直接使用pull命令拉取RabbitMQ镜像:

docker pull rabbitmq:3-management

然后运行镜像:
这里写图片描述

docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq01 image_id

测试:在浏览器访问,初始化账号密码都是guest
这里写图片描述

SpringBoot中的RabbitMQ示例

使用IDEA的Spring Initializr创建项目,选择RabbitMQ模块,以及Web模块,方便测试

我们可以查看RabbitAutoConfiguration的源码:

@Configuration
@ConditionalOnClass({RabbitTemplate.class, Channel.class})
@EnableConfigurationProperties({RabbitProperties.class})    // RabbitProperties配置类,有哪些可配置项就查看该类即可
@Import({RabbitAnnotationDrivenConfiguration.class})
public class RabbitAutoConfiguration {
    public RabbitAutoConfiguration() {
    }

    @Bean    // 加入RabbitTemplate组件
    @ConditionalOnSingleCandidate(ConnectionFactory.class)
    @ConditionalOnMissingBean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        PropertyMapper map = PropertyMapper.get();
        RabbitTemplate template = new RabbitTemplate(connectionFactory);
        MessageConverter messageConverter = (MessageConverter)this.messageConverter.getIfUnique();
        if (messageConverter != null) {
            template.setMessageConverter(messageConverter);
        }
        ......
    }

    ......
}

配置:

spring:
  rabbitmq:
    host: 192.168.3.18
    username: guest
    password: guest
    port: 5672

其实这里除了host,其他都是自动配置类的默认配置值

测试:

消息的发布:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootAmqpApplicationTests {

    @Autowired
    RabbitTemplate rabbitTemplate;

    @Test
    public void pubish() {
        // Message,需要自己构造,自定义消息头和消息体
        // rabbitTemplate.send(exchange, routingKey, message);

        // 使用MessageConverter将对象序列化,默认使用SimpleMessageConverter
        // 我这里的设置使用direct类型的exchange(amq.direct)绑定一个queue(yujiago.news)
        String exchange = "amq.direct";
        String routingKey = "yujiago.news";
        Map<String, Object> map = new HashMap<>();
        map.put("msg", "这是一条消息!");
        map.put("data", Arrays.asList("数据", 123, true));
        rabbitTemplate.convertAndSend(exchange, routingKey, map);

    }

}

查看:
这里写图片描述
我们可以配置自己的MessageConverter,查看MessageConverter的继承树:
这里写图片描述
编写配置类:

@Configuration
public class AMQPConfig {
    @Bean
    public MessageConverter messageConverter() {
        return new Jackson2JsonMessageConverter();
    }
}

结果:
这里写图片描述

消息的接收:

@Test
public void consume() {
    String queueName = "yujiago.news";
    // Message receive = rabbitTemplate.receive(queueName);
    Object o = rabbitTemplate.receiveAndConvert(queueName);
    System.out.println(o.getClass());
    System.out.println(o);
}

结果:
这里写图片描述

消息的监听:

消息的监听需要使用两个注解:

  • @EnableRabbit:开启Rabbit注解,标注在启动类上
  • @RabbitListener:监听消息队列,标注在接收方法上
@Service
public class UserService {

    @RabbitListener(queues = "yujiago.message")
    public void receiveMessage(Message message){
        System.out.println(message.getBody());
        System.out.println(message.getMessageProperties());
    }

    @RabbitListener(queues = "yujiago.user")
    public void receiveUser(User user){
        System.out.println(user);
    }

    @RabbitListener(queues = "yujiago.news")
    public void receiveMap(Map map){
        System.out.println(map);
    }
}

AmqpAdmin的使用

AmqpAdmin类:spring-amqp的core中,主要用作管理queue、exchange以及binding关系,查看类中声明:为AMQP指定一组基本的AMQP管理操作,其接口定义如下:

public interface AmqpAdmin {

    void declareExchange(Exchange var1);

    boolean deleteExchange(String var1);

    Queue declareQueue();

    String declareQueue(Queue var1);

    boolean deleteQueue(String var1);

    void deleteQueue(String var1, boolean var2, boolean var3);

    void purgeQueue(String var1, boolean var2);

    void declareBinding(Binding var1);

    void removeBinding(Binding var1);

    Properties getQueueProperties(String var1);
}
RabbitMQ 整合 SpringBoot 大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力、流量削峰消息服务中两个重要概念:消息代理(`message broker`)和目的地(`destination`)当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。消息队列主要有两种形式的目的地1. 队列(`queue`):点对点消息通信(`point-to-point`)2. 主题(`topic`):发布(`publish`)/订阅(`subscribe`)消息通信。 阅读详情

相关推荐

SpringBoot中整合RabbitMQ(测试+部署上线 最完整)

RabbitMQ服务端是由并发式语言Erlang编写的,所以安装RabbitMQ的之前需要安装Erlang,保证所需要的环境。注意:这里没有下载的版本,下载需要与自己的版本一致,如果发现启动不了RabbitMQ,请看后面的启动RabbitMQ。由于目前是测试阶段,这里我使用之前学习的时候的版本。

m0_74825108的博客 1559

【RabbitMQ | 第七篇】RabbitMQ实现JSON、Map格式数据的发送与接收

RabbitMQ系列第七篇文章主要介绍了如何实现JSON、Map格式数据的发送与接收;在发送服务端中,核心为RabbitMQ的配置文件(配置json转换器、设置交换机、队列、绑定交换机与队列)发送消息的核心方法为RabbitTemplate.convertAndSend方法,传入指定交换机、路由键、以及要发送的消息内容;在接收服务端中,核心依然为配置文件中的客户端配置:①手动确认信息;②添加监听队列;③设置统一消息处理类,接着在消息处理类中获取消息的队列名称,根据不同的队列名称调用不同的消息处理类;在接收j

踢桃的成长之路 1572

嵌入式开发也玩“全家桶”?手把手教你用CLion+PyOCD调试APM32,比OpenOCD更简单

本文详细介绍了如何使用CLion和PyOCD组合进行APM32嵌入式开发,提供从环境配置到实战调试的完整指南。相比传统工具如Keil和OpenOCD,这套方案更轻量、易用,特别适合现代开发者需求,涵盖CMake配置、PyOCD调试技巧及常见问题解决。

weixin_42543046的博客 463

RabbitMQ实现JSON、Map格式数据的发送与接收

RabbitMQ 是目前非常热门的一款消息中间件,不管是互联网行业还是传统行业都在大量地使用。RabbitMQ 凭借其高可靠、易扩展、高可用及丰富的功能特性收到越来越多企业的青睐。在实现的项目开发中,经常使用Json、Map格式数据。下面将介绍RabbitMQ实现Json、Map格式数据的发送与接收。 (1)创建SpringBoot 项目,并整合 RabbitMQ框架 在pom.xml配置信息文件中,添加相关依赖文件: <!-- AMQP客户端 --> <dependency&g.

pan_junbiao的博客 1万+

中国30米逐年植被净初级生产力(NPP)数据集(1982年至今CASA模型)

1.3 气温、降水、地表太阳辐射数据 气温和降水数据月度空间插值数据是基于全国2400多个站点的日观测数据,在计算各气象要素月值的基础上,基于Anusplin软件插值生成的1982年以来各月度30米分辨率气温和降水栅格数据,插值过程中引入高程作为协变量。气温单位为℃,降水单位为mm。1.2 土地覆盖数据 土地覆盖数据来源于1985 年-2020年全球30米精细地表覆盖动态监测产品,该数据集包含29个地表覆盖类型,进行拼接、裁剪、重分类和重采样处理,获得8期250米分辨率的植被类型数据。

地球资源数据云的官方博客 2839

一文搞懂STM32定时器翻转模式(产生多路频率、占空比的PWM)

(产生多路频率、占空比的PWM)

weixin_56688599的博客 7934

超详细的SpringBoot集成RabbitMQ教程实现收发消息!!

RabbitMQ集成SpringBoot学习

小泽的博客 1559

手把手教你用OpenClaw+飞书打造论文写作AI助手(附踩坑实录)

面对几十篇文献,逐一阅读摘要都费时。我:“请提取桌面‘论文参考文献’文件夹中所有PDF的摘要,整理成表格,包含:论文标题、作者、发表年份、核心方法、主要结论。AI助手:“正在处理...已提取18篇论文摘要,汇总表格已保存到桌面‘文献摘要汇总.xlsx’。这比我自己一个个打开PDF复制粘贴快了不止100倍。OpenClaw+飞书的组合,让AI真正成为了我的“数字员工”。虽然配置过程有些曲折,但看到它在飞书里回应指令、帮我处理繁琐工作时,那种成就感无可替代。如果你也在准备论文,不妨试试这套方案。记住,

AcademicIdeas的博客 1041

RabbitMQ问题分析及应对策略

rabbitmq的常见问题,消息重复消费,消息积压,消息丢失,分析及应对策略

qq_45643467的博客 373

海思Hi3559A/CV100 DDR4参数配置经验分享

海思Hi3559A/CV100 DDR4参数配置方法 Hi3559AV100 DDR4 驱动配置说明 1.1 Hi3559AV100 DDR4 CLK/AC 驱动配置方法 寄存器地址 DDR PHY0:0x1206d0bc DDR PHY1:0x1206f0bc 寄存器描述 − Bit[5:3]:CLK 驱动 − Bit[14:12]:2T 驱动 − Bit[20:18]:1T 驱动 驱动大小定义 − 000:Disable − 001:240ohm − 010: 120ohm − 011:80ohm −

WeChat_zhanggong345的博客 2878

TGAT Python:图神经网络中的动态图算法

其中,图神经网络中的动态图算法成为了研究的热点之一。在模型的 forward 方法中,通过循环调用 TGATLayer 实例来进行图神经网络的前向传播。最终,模型返回图中节点的表示向量 output,可以用于图分类等任务。TGAT 算法的核心思想是在节点之间建立注意力连接,以捕捉节点在不同时间步之间的关系。TGAT 算法通过引入注意力机制和时间信息,从而有效地对动态图数据进行建模和分析。通过以上 Python 代码,我们可以方便地构建和训练 TGAT 模型,并在图分类任务中应用它。

2301_79366435的博客 1826

mq springboot接收和发送

config @Slf4j @Configuration public class RabbitMqConfig { @Bean(name = "simpleRabbitListenerContainerFactory") public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(Connecti...

weixin_43153309的博客 153

YOLOv8改进 | 融合篇,YOLOv8改进主干网络为MobileNetV4+CBAM注意机制+Powerful-IoU损失函数(2024 最新IOU),全网首发,实现极限涨点

本文将在 YOLOv8 主干中引入 MobileNetV4 轻量化骨干,同时,在检测头引入 CBAM机制注意力机制,并采用 Powerful-IoU 损失函数作为模型的损失函数,其中,MobileNetV4 通过引入通用反向瓶颈(UIB)搜索块和 Mobie MQA 注意力模块创新设计,实现了模型的轻量级化;同时,MobileNetV4 采用了优化的 NAS 策略,通过粗粒度和细粒度搜索相结合的方法,显著提高了搜索效率并改善了模型质量。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3783

Linux 安装rabbitMQ(docker)并集成springboot测试连接

帮助文档: https://www.rabbitmq.com/getstarted.html 1.0拉取docker镜像 docker pull rabbitmq:management 2.0执行下边命令 name 名字自己改 ,pass 密码 -p15672 对外端口 ,-p5672 对内端口 -p25672集群 docker run -di --name lipengRabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=ad

weixin_45608827的博客 353

华为OD机考双机位C卷 - 朋友圈个数(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 朋友圈个数(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 695

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

20221130 RabbitMQ

RabbitMQ

weixin_51876109的博客 724

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SpringBoot整合RabbitMQ

写在前面 如果对你有帮助,请给点个关注和点个赞哦,嘿嘿嘿 MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的...

BoCong-Deng的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

RabbitMQ与SpringBoot整合详解

一、前言   本文章总体简介,会采用Docker下载安装RabbitMQ,详细介绍RabbitMQ优缺点及其相关技术知识点,SpringBoot作为整合学习的基础架构。看完本片文章,你会了解消息队列RabbitMQ,你会使用消息队列RabbitMQ。 二、消息队列   当第一次出现在我脑中这个词语时,我会问自己什么时消息队列?我做的项目为什么没有消息队列?我做的项目可以用消息队列么?如果可以用消息队列这要怎么使用消息队列?消息队列能解决项目什么问题?等等问题会出现在我的脑海…,然而我将会在面文章中对自己慢慢

vanGogh的博客 7182

SpringBoot整合Rabbitmq:超详细(包括docker配置Rabbitmq的详细过程)

MQ(message queue),从字面意思上看就个 FIFO 先入先出的队列,只不过队列中存放的内容是 message 而已,它是一种具有接收数据、存储数据、发送数据等功能的技术服务。在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务,用于上下游传递消息。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务常见的MQ消息中间件有很多,例如ActiveMQRabbitMQKafkaRocketMQ等等。

yw2490614330的博客 2907

RabbitMQ(Docker 单机部署)

本文给大家介绍如何使用 Docker 单机部署 RabbitMQ 并与 SpringBoot 整合使用。

DC1020的博客 1982

Docker部署RabbitMQ与简单使用

官网地址: Messaging that just works — RabbitMQ我的Docker博客:Docker-优快云博客其中包含几个概念::生产者,也就是发送消息的一方:消费者,也就是消费消息的一方:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue基于Docker来安装RabbitMQ,使用下面的命令即可: root

qq_65252348的博客 2099

rabbitMq docker安装以及简单使用(springboot)

RabbitMQ 核心名词简介 Publisher:消息生产者 Exchange: 交换器,用来接收生产者发送的消息并将这些消息根据路由键和队列的绑定关系路由给服务器中的队列 Exchange有4种类型:direct(默认),fanout, topic, 和headers: diract: 完全匹配策略,交换器的路由键key必须和binding中的路由key完全一直,才能发送消息到对应...

xiao/du的博客 5467

Rabbitmq 整合Spring,SpringBoot与Docker

SpringBootLearning是对Springboot与其他框架学习与研究项目,是根据实际项目的形式对进行配置与处理,欢迎star与fork。 [oschina 地址] http://git.oschina.net/cmlbeliever/SpringBootLearning [github 地址] https://github.com/c...

aaronyan1990的博客 218

Java操作RabbitMq并整合SpringBoot

RabbitMq自带有专门的管理界面,可以在其管理界面对RabbitMq进行管理查看等操作。,当我们启动RabbitMq后,需要启动管理界面插件后才能访问界面。RabbitMq的管理界面的对外端口为。库来获取对RabbitMq的支持。在SpringBoot的配置文件。库中,是通过依赖上面。

focus:Follow One Cause Until Success 1005

docker安装RabbitMQ,开启mqtt协议,并且SpringBoot继承mqtt

MQTT(消息队列遥测传输)是ISO标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。国内很多企业都广泛使用MQTT作为Android手机客户端与服务器端推送消息的协议。特点MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;

路漫漫其修远兮,吾将上下而求索 2142
上一篇: 文件上传
下一篇: Spring解决跨域问题(@CrossOrigin)
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值