springboot+RabbitMQ(消息队列)
springboot+RabbitMQ(消息队列)
1、什么是RabbitMQ?
1.1、什么是MQ?
消息队列(Message Queue,简称MQ),既是Queue,那么应该是FIFO(先进先出)的原则,并且队列里面存放的是Message。
1.2、为什么要用MQ?
1、不同的进程之间在传递消息时,由于耦合度太高,改动很大,故将两个进程进行解耦,也就是再抽出一个模块即消息队列,来传递两个进程之间的消息,这样单独修改一个进程另一个进程就不会受到影响了。
2、不同的进程之间传递消息,为了实现标准化。
3、处理消息的进程一下子无法处理完很多的传递过来的消息,所以必须要给收到的消息排队。
1.3、RabbitMQ介绍
RabbitMQ是一个开源的、在AMQP基础上完成的、可复用的企业级的消息系统。支持主流的操作系统(Linux、Windows等),并且支持多种开发语言(java、c/c++等)。
2、springboot整合RabbitMQ
2.1、搭建RabbitMQ的环境
2.1.1、下载地址:RabbitMQ下载
2.1.2、安装
安装网上都有教程的,不展开详细的说明了。
2.1.3、启动
安装完成后,启动RabbitMQ,在浏览器中输入地址:http://127.0.0.1:15672/ 其中127.0.0.1是要根据你的安装的机器的ip变化而更改的。如图:
然后使用默认账号登录:账号密码都是guest
2.2、新建一个springboot项目
大概的结构像下图就可以:
2.3、pom文件和RabbitMQ配置文件
pom文件依赖部分(其实就加一个amqp的依赖就好了):
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
application.properties配置文件:
server.port=8080 spring.application.name=springboot-rabbitmq-demo spring.rabbitmq.host=10.10.38.54 spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest spring.rabbitmq.publisher-confirms=true spring.rabbitmq.virtual-host=/
在启动类中声明一个Queue使用:
@SpringBootApplication public class RabbitmqDemoApplication { @Bean public Queue helloQueue() { return new Queue("helloQueue"); }
3、分场景实现整合(整个过程迭代)
3.1、多种情况统一归类(三种如下情况)
1、单生产者和单消费者。2、单生产者和多消费者。3、多生产者和多消费者。
controller层中接口如下:
生产者代码如下:
消费者代码如下:
然后根据上面的项目框架图的结构,自己增加多个生产者和消费者。
执行结果(多生产者对多消费者):
然后在RabbitMQ管理界面就可以看到下图的情况:
3.2、实体类传输(实体类必须序列化)
实体类的传输支持了对象的发送和接收,但是需要将实体类进行序列化。
随便创建一个实体类:
在controller层中加一个接口:
然后在生产者1号或者2号都加上发送代码:
接着就是消费者1号或者2号加上处理代码:
运行结果如下图:
此时RabbitMQ Management如下图所示:
3.3、TopicExchange(主题模式)
TopicExchange 是RabbitMQ中最灵活的一种方式,它可以根据routing_key自由绑定不同的队列。
在controller中新起一个接口:
然后在启动类中新加两个Queue,并且将这两个队列与exchange绑定:
生产者如下:
消费者另外再写(TopMessageReceiver等)如下:
运行结果如下:
3.4、FanoutExchange(订阅模式)
此模式就是广播模式,给Fanout交换机发送消息,绑定了这个交换机的所有队列都会收到这个消息。
首先在controller层中再重新声明一个接口:
然后在启动类中再声明三个Queue和Exchange 并且绑定:
生产者中发送消息:
消费者中接受处理消息:
运行结果:
4、总结
通过学习了RabbitMQ,知道了RabbitMQ是个什么,可以用来做什么,可以使用MQ实现商品数据同步,可以使用MQ来降低系统之间的耦合,当然也可以便于管理数据的同步。说明:本次学习主要参考:https://www.liangzl.com/get-article-detail-21642.html 和 https://blog.csdn.net/hellozpc/article/details/81436980#1MQ_9 这两篇博客进行的,需要的话可以直接去他们那里学习。
- Springboot+RabbitMQ消息队列
- spring boot Rabbitmq集成,延时消息队列实现
- spring boot Rabbitmq集成,延时消息队列实现
- Spring Boot + RabbitMQ 实现消息队列场景
- 集群与负载均衡系列(6)——消息队列之rabbitMQ+spring-boot+spring amqp发送可靠的消息
- Springboot+rabbitmq实现延时队列的两种方式
- 第四十六章:SpringBoot & RabbitMQ完成消息延迟消费
- Spring Boot--整合阿里云消息队列MQ
- Spring Boot RabbitMQ 延迟消息实现完整版示例
- SpringBoot对消息队列(MQ)的支持
- SpringBoot+ActiveMQ多消息队列监听
- SpringBoot整合MQ消息队列
- spring boot rabbitmq 多MQ配置 自动 创建 队列 RPC
- SpringBoot对消息队列(MQ)的支持
- Spring Boot RabbitMQ 延迟消息实现完整版
- 详细介绍Spring Boot + RabbitMQ实现延迟队列
- Spring Boot RabbitMQ 消息确认
- springboot + rabbitmq 消费者消息确认 (Ack)
- springboot+rabbitmq集成
- RabbitMQ .NET消息队列使用详解