您的位置:首页 > 编程语言 > Java开发

springboot+RabbitMQ(消息队列)

2019-07-15 15:34 656 查看

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.htmlhttps://blog.csdn.net/hellozpc/article/details/81436980#1MQ_9 这两篇博客进行的,需要的话可以直接去他们那里学习。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: