一、消息队列简介
1.消息队列角色
(1)Broker:
消息服务器,作为server提供消息核心服务
(2)Producer:
消息生产者,业务的发起方,负责生产消息传输给broker
(3)Consumer:
消息消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理
(4)Topic:
主题,发布订阅模式下的消息统一汇集地,不同生产者向topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的广播
(5)Queue:
队列,PTP模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收
(6)Message:
消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输
2.消息队列工作模式
(1)Point-to-Point
点对点,其过程理解起来比较简单。它好比是两个人打电话,这两个人是独享这一条通信链路的。一方发送消息,另外一方接收,就这么简单。在点对点模式下,消息被保留在队列中。 一个或多个消费者可以消耗队列中的消息,但是特定消息只能由最多一个消费者消费。 一旦消费者读取队列中的消息,它就从该队列中消失。 该模式的典型示例,如订单处理系统,其中每个订单将由一个订单处理器处理,但多个订单处理器也可以同时工作。
(2)Pub/Sub
即发布/订阅模式,该模式有点类似于我们日常生活中订阅报纸。对于每一个订阅者来说,可以选择一份或者多份报纸。那么这些我们订阅的报纸,就相当于发布订阅模式里的topic。有很多个人订阅报纸,也有人可能和我订阅了相同的报纸。多人订阅了相同的报纸相当于多人在同一个topic里注册了。对于一份报纸发行方来说,它和所有的订阅者就构成了一个1对多的关系。在这种模式下,消息被保留在主题中。 与点对点模式不同,消费者可以订阅一个或多个主题并使用该主题中的所有消息。 该模式下消息生产者称为发布者,消息使用者称为订阅者。
3.消息队列缺点
系统可用性降低
系统复杂性提高
数据一致性无法保证
二、RabbitMQ
RabbitMQ是一款在全球范围内使用非常广泛的开源消息队列中间件。它轻量级、易部署、并支持多种协议。它基于Erlang开发,天生拥有高并发的能力。
1.Rabbit MQ
(1)生产者
产生消息的进程或服务
(2)消费者
接收消息的进程或服务
(3)队列
RabbitMQ是消息队列中间件,而真正储存消息数据的就是队列,队列可以有很多。
(4)交换器
类似于网络设备交换机,它可以根据不同的关键字,将消息发送到不同的队列。
(5)虚拟主机
虚拟主机类似于Apache的虚拟主机,如果没有虚拟主机,当RabbitMQ中的数据越来越庞大,队列越来越多,随之而来的是令人头痛的管理问题,比如队列、交换器命名冲突,它们相互影响等等。虚拟主机能够解决这些问题,而不需要我们部署多个RabbitMQ来负责不同的业务。
虚拟主机提供了资源的逻辑分组和分隔,每一个虚拟主机本质上是mini版的RabbitMQ服务器,他们有用自己的连接、队列、绑定、交换器,更重要的是有用自己的权限机制,这有点类似服务器和运行在服务器上的虚拟机一样。
三、安装Rabbit MQ (单机)
1.安装erlang
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
利用阿里云仓库部署
[root@localhost ~]# yum install -y erlang rabbitmq-server ##安装erlang ## 安装rabbitmq服务
2. 启动RabbitMQ
[root@localhost ~]# systemctl start rabbitmq-server
## 监听端口为4369,25672
[root@localhost ~]# ps aux |grep rabbit ## 查看rabbit进程
[root@localhost ~]# netstat -lntp ## 查看监听端口