目录
消息队列
消息队列:Message Queue(MQ)
概念
- 消息(Message)是指在应用间传送的数据
- 消息队列(Message Queue)是一种应用间的通信方式,确保消息的可靠传递
- 临时存放数据的空间(缓存)
- 消息队列是中间件的一种
主流的消息队列
- 目前主流的几大消息队列有:RabbitMQ、ActiveMQ、RocketMQ、Kafka、ZeroMQ
消息队列名词
(1)Broker
- 消息服务器,作为Server提供消息核心服务
(2)Topic
- 主题,同类消息的集合,不同生产者向Topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的传输
(3)Producer
- 消息的生产者,业务的发起方,负责生产消息传输给broker
(4)Consumer
- 消息的消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理
(5)Queue
- 队列,Point-to-Point模式下,特定生产者向特定的queue发送消息,消费者订阅特定的queue完成指定消息的接收,先进先出
(6)Message
- 消息,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输
消息队列中两种工作模式
Point-to-Point(PTP、点到点)
- 一方发送消息,另外一方接收
比如消息发布之后,消息在队列中会等待消费者提取,消费者提取完后,整个队列会向前进一位,并且释放掉被提取出的消息(一对一)
Pub/Sub
- 发布/订阅模式,消费者可以订阅一个或多个主题并使用该主题中的所有消息
比如消息发布之后,某个消费者提取消息之后,被提取的消息不会释放,这些消息需要提供给多个消费者接收(一对多)
消息队列的缺点
系统可用性降低
- 增加了消息队列,结构就越复杂,故障率就会提高
系统复杂性提高
- 添加了消息队列的技术,不管是开发人员还是运维人员,在构建业务的时候都要针对消息队列做出处理
数据一致性无法保证
- 因为增加了和接收方之间的一个中间环节,数据的延迟会增大
RabbitMQ
相关术语
(1)生产者
产生消息的进程或服务
(2)消费者
接受消息的进程或服务
(3)队列
RabbitMQ是消息队列中间件,而真正储存消息数据的就是队列,不同的程序可以使用同一个队列,而队列也可以有多个
(4)交换器
把消息进行分类,它可以根据不同的关键字,将消息发送到不同的队列
(5)虚拟主机
虚拟主机可以把一个服务器上的RabbitMQ拆分成多个单元,每一个单元都可以当成一个单独的、轻量的RabbitMQ服务器
单节点示例
单节点就是只有一台主机部署RabbitMQ,但为了充分体现消息队列作为中间件角色,就需要把该主机部署到两个程序的中间
因此我们需要3台CentOS 7虚拟机,两台作为两边的程序,其中一台部署RabbitMQ作为中间件
示例环境
操作系统 |
IP 地址 |
角色 |
CentOS 7 |
192.168.10.101 |
中间件 部署RabbitMQ消息队列 |
CentOS 7 |
192.168.10.102 |
消息的生产者 |
CentOS 7 |
192.168.10.103 |
消息的消费者 |
部署RabbitMQ
打开101主机,并连接上XShell,我们先来部署RabbitMQ
安装RabbitMQ需要仓库具有epel扩展源和安装erlang语言,自带光盘上是没有的,需要借助阿里的仓库源来安装
为了方便实验,关闭防火墙和内核安全机制
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
然后把下方命令全部复制带终端直接回车即可替换仓库源为阿里云的
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
然后安装所需依赖,因为刚刚清除过元数据,在第一次安装时就重建元数据,需要等待一段时间
安装完后启动rabbitmq-server服务,然后可以使用ps命令查看是否有