1、RabbitMQ 的概念
RabbitMQ 是有 Rabbit 公司基于 AMQP 标准开发的消息中间件,使用了 Erlang 语言开发。
什么是 AMQP ? AMQP全称为 Advanced Message Queuing Protocol(高级消息队列协议),是一种网络协议,专门为消息的中间件设计。
Erlang语言是一门专门为开发高并发和分布式系统的一种语言。
RabbitMQ 架构图如下:
下面我们对上述图片中的一些角色进行解释:
-
Produces
:消息提供方,是产生数据发送消息的程序。 -
Consumer
:消息消费方,是一个等待接收消息的程序。一个程序既可以是生产者又是可以是消费者。 -
Broker
:接收和分发消息的应用,是 RabbitMQ 服务端。 -
Connection
:Produce 或者Consumer 和 Broker之间的 TCP 连接管道 -
Channel
:Channel 是在 connection 内部建立的逻辑连接,减少了建立 Connection 的开销 -
Virtual host
:是 Broker 的组成部分。当多个不同的用户使用同一个 Broker 提供的服务时,可以划分出多个 Virtual host 。每一个 Virtual host 都由 一个或多个 Exchange 和 Queue 组成。 -
Exchange
:交换机,是 Virtual host 的组成部分。一方面它接收来自 Produces 的消息,另一方面它将消息推送到队列中。 -
Queue
:队列,是用来存放 Exchange 发送的消息,消息最终被送到这里等待 Consumer 取走,是 Virtual host 的组成部分。 -
Binding
:Exchange 和 Queue 之间的虚拟连接。Exchange 通过 Binding 对接收到的消息进行处理,是发送到某个队列或者发送到多个队列等等。
2、RabbitMQ 的安装
2.1、安装 RabbitMQ
RabbitMQ 可以在 Window 或 Linux 上安装,下面我们通过阿里云的云服务器安装RabbitMQ。
使用 RabbitMQ 需要Erlang
语言的安装包、Socat
安装包和RabbitMQ
安装包。Erlang
和RabbitMQ
可以在官网上进行下载,但是需要注意Erlang
和RabbitMQ
的版本,防止出现版本冲突。具体的版本对照可以参考如下网页
Erlang
和RabbitMQ
已经上传到了云服务器上,如图所示:
-
安装 Erlang:通过
rpm -ivh erlang文件名称
命令安装 Erlang。
-
安装 RabbitMQ 的依赖:通过
yum install socat -y
安装 socat 。
-
安装 RabbitMQ:通过
rpm -ivh RabbitMQ安装包名称
命令安装。 -
开启 RabbitMQ 的 web管理界面:通过
rabbitmq-plugins enable rabbitmq_management
命令开启
2.2、正确启动 RabbitMQ
通过上述四步就完成了 RabbitMQ 的安装。可以通过如下命令管理 RabbitMQ :
service rabbitmq-server start #启动服务
service rabbitmq-server stop #停止服务
service rabbitmq-server restart #重启服务
service rabbitmq-server status #查看状态
因为我们给 RabbitMQ 安装了web 管理界面,所有我们可以通过https://ip地址:15672
访问管理界面,因为服务器没有开启 15672 端口的权限,所以需要在阿里云控制台添加安全组规则
然后可以得到访问到如下页面:
2.3、登录 web 管理界面
在服务器中可以通过rabbitmqctl list_users
命令查看用户,在安装完 RabbitMQ 之后会有一个默认用户,用户名和密码都为guest。
但是 guest 登录失败:
RabbitMQ 从3.3.0开始禁止使用 guest/guest 通过除localhost外的访问,所以我们需要额外的创建一个用户来访问 web 管理界面。
在创建之前我们首先要去了解 RabbitMQ 中涉及到的角色:
administrator
:超级管理员,可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。monitoring
:监控者,可登陆管理控制台,同时可以查看节点信息。policymaker
:策略制定者,可登陆管理控制台, 同时可以对policy进行管理。management
:普通管理者,仅可登陆管理控制台。
创建用户的步骤如下:
- 通过
rabbitmqctl add_user 用户名 密码
命令创建一个用户
- 通过
rabbitmqctl set_user_tags admin administrator
命令给角色赋予角色
设置完成之后,就可以通过新创建的用户登录 web 管理界面了:
在进入到 web 管理界面之后,我们也可以通过界面进行用户的创建。
2.3、设置用户权限
RabbitMQ 也有类似与 MySQL 一样的权限管理。在 RabbitMQ 中可以存在多个 Virtual Host,每一个 Virtual Host 就相当于 MySQL 中的数据库。那么就需要给用户设置某个或多个 Virtual Host 的配置和读写的权限,只有设置了权限之后,才能对某个 Virtual Host 进行操作。
我们可以通过rabbitmqctl set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
用户给用户设置权限,具体写法如rabbitmqctl set_permissions -p "/" long ".*" ".*" ".*"
,给 long 这个用户设置对 / 这个默认 Virtual Host配置和读写的权限。