rabbitMQ学习(一)
前言
为什么要学习rabbitMQ?
别问,必学。
MQ是什么,有什么优势?
“消息队列”是在消息的传输过程中保存消息的容器。 --百度百科
简单来说,消息队列即在两个系统中用于消息传递的一个中间件,一般有三个角色
- 消息中间件
- 发送方(生产者)
- 接收方(消费者)
相比于让两个系统之间进行互相调用,使用MQ有如下优势:
- 解耦 两个系统不会直接依赖,而是与消息中间件进行通信
- 提速 发送方只需要将消息放入队列中即可返回,不用等待接收方的处理
- 消峰 让接收方不会被动承担大量的请求压力,而是主动的处理消息队列中的请求
那么MQ中还有哪些问题需要解决呢?
- 高可用 中间件都面临着高可用的问题,我们必须最大程度下保证消息队列不会宕机
- 复杂性 由于是通过MQ来进行异步调用,那么怎们保证消息没有被重复消费?消息丢失怎么办?如何按顺序处理消息?这都是需要考虑的问题
- 一致性 由于生产者发送完数据之后就直接返回,若数据处理错误就会造成生产者和消费者数据的不一致,这也是要解决的问题
常见的MQ
市面上有很多MQ产品:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LFSRpZ6J-1620897548293)(uploads/image-20210511153834624.png)]
因为是初学者,所以我们建议先学习rabbitMQ,该产品的社区较为活跃,也更为稳定
RabbitMQ
基本使用
rabbitMQ的使用很简单,安装就不在这里赘述了。
我们先看一下rabbitMQ中的结构图:

可以看到主要分为5大部分,除开生产者和消费者还有
生产者的 Connection: 用于管理和MQ之间的Socket连接,一个连接中可以有多个Channel进行数据传输
消费者的 Connection: 同上
Brocker: 就是MQ的服务器,其中包含多个虚拟机(类似于多个数据库)。每一个虚拟机包含多个Exchange(交换机),交换机与生产者对应,可以绑定多个队列,并将生产者的消息发送到绑定的队列中,而队列和消费者对应,消费者不断地从队列中取数据。
我们首先考虑一种最为简单的模式,即一个消费者、一个生产者。
这样我们就只需要一个交换机、一个队列:
生产者:
// 1. 创建工厂
ConnectionFactory factory =