前言
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件),其服务器是用Erlang语言编写的。它轻量级,可以部署在分布式和联合配置中,以满足高规模,高可用性要求,其安装过程并不复杂。(安装之前请确保你的虚拟机已安装jdk)
前面提到 rabbitmq 是由 erlang 语言编写的,所以需要下载两个压缩包
1. erlang 推荐下载地址: erlang的所有版本下载
2. rabbitmq 官方下载地址: https://www.rabbitmq.com/
2020-05-07更新:
rabbitmq其实更新速度很快,现在官网已3.8版本,个人还没用新版,不过3.7绝对够用
考虑到erlang和rabbitmq下载速度会很慢很慢,现已上传至某盘,直接去这下载,下面是链接:
https://pan.baidu.com/s/1esqxDc1J-iOsMclG6jDV6A 34xd
3. 注意版本
rabbitmq 和 erlang 是有版本依赖的,不能两个版本相差太多,官方有版本说明: rabbitmq和erlang版本依赖说明
下载完成后就可以备份到你U盘里了,做个归纳,以后随时可以安装。
4. 上传到 Linux
在 /usr/local 下创建一个 rabbitmq 文件夹
[root@localhost ~]# cd /usr/local/
[root@localhost local]# mkdir rabbitmq
把刚下载好的两个压缩包上传到 rabbitmq 文件夹
我这里通过 rz 命令把 Windows 里文件上传到 Linux 里,执行 yum install -y lrzsz 后即可支持 rz 上传功能
命令行输入 rz,即可选择本地文件进行上传
1. 环境
[root@localhost rabbitmq]# yum -y install ncurses-devel
[root@localhost rabbitmq]# yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
2. 解压
[root@localhost rabbitmq]# tar -xvf otp_src_21.1.tar.gz
3. 安装
进入解压后的 otp_src_21.1 目录,执行以下命令生成 erlang 目录(我目录就放在 rabbitmq 文件夹里,随意)
[root@localhost rabbitmq]# cd otp_src_21.1
[root@localhost otp_src_21.1]# ./configure --prefix=/usr/local/rabbitmq/erlang --without-javac
接着进行编译、安装(过程有点慢)
[root@localhost otp_src_21.1]# make
[root@localhost otp_src_21.1]# make install
4. 测试
[root@localhost otp_src_21.1]# cd ..
[root@localhost rabbitmq]# cd erlang/
[root@localhost erlang]# ./bin/erl
若能进入erlang的shell里去,表示 erlang 已经安装完成(两次 Ctrl + C 即可退出来),如下图(环境变量后面再配置)
1. 环境
[root@localhost rabbitmq]# yum install python -y
[root@localhost rabbitmq]# yum install xmlto -y
2. 解压(先得到tar格式文件,接着再解压)
[root@localhost rabbitmq]# xz -d rabbitmq-server-generic-unix-3.7.17.tar.xz
[root@localhost rabbitmq]# tar -xvf rabbitmq-server-generic-unix-3.7.17.tar
3. 改名(原名过长就改为rabbitmq)
[root@localhost rabbitmq]# mv rabbitmq_server-3.7.17/ rabbitmq
现在/usr/local/下 rabbitmq 的目录如下:erlang 是 otp 生成的,解压后的 rabbitmq 无需再进行make操作,可直接使用
这是 rabbitmq 里 sbin 目录,里面都是一些命令,包括启动、停止,可自行去查看rabbitmq 里的目录情况
4. 配置环境变量
[root@localhost rabbitmq]# vi /etc/profile
在 profile 文件末尾加上下面这句话(同时包含了erlang的环境变量配置),要注意路径要正确,最后wq保存退出
export PATH=$PATH:/usr/local/rabbitmq/erlang/bin:/usr/local/rabbitmq/rabbitmq/sbin
[root@localhost rabbitmq]# source /etc/profile
5. 启动
由于上面已经配置环境变量,所以可不必进入到 rabbitmq 的 sbin 命令目录,直接 rabbitmq-server 即可启动。
当然也可以进入到 sbin 目录,使用 ./rabbitmq-server 进行启动(目前不是后台启动,可以清楚看到启动情况)
6. 关闭
其实关闭 rabbitmq 的命令也在其 sbin 目录里,就是第二个 rabbitmqctl,命令如下
[root@localhost sbin]# ./rabbitmqctl stop
其实到这里,rabbitmq 已经算安装完成了,在一般项目里已经可以正常使用。
rabbitmq 它默认会创建一个账号 guest,密码也是 guest,但是默认的这个账号权限比较低,只能使用 localhost 连接,无法远程连接(其实官网也有说明,当然也有解决办法,下面会有介绍一种方案)
1. 启动插件功能
[root@localhost sbin]# ./rabbitmq-plugins enable rabbitmq_management
这时,rabbitmq 会有一个网页端口号,默认为 15672,启动 rabbitmq 后,在浏览器访问 IP+端口,如:http://192.168.183.129:15672/,会出现一个登陆界面,输入默认的 guest 账号试试,发现登陆不了(因为默认的guest用户只能使用localhost连接)
如果想要登陆进去的话,可以对guest做配置修改,但是不建议,这里可以创建一个账号
2. 创建一个账号
(1)创建之前,可以先查看一下当前有哪些用户和权限
[root@localhost sbin]# ./rabbitmqctl list_users
[root@localhost sbin]# ./rabbitmqctl list_user_permissions guest
(2)添加用户(我这里账号就设为 admin,密码也是 admin,随意)
[root@localhost sbin]# ./rabbitmqctl add_user admin admin
(3)设置其角色(超级管理员)
[root@localhost sbin]# ./rabbitmqctl set_user_tags admin administrator
(4)设置其权限
[root@localhost sbin]# ./rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
这时再用刚创建的 admin 账号去登陆试试,发现已经可以登陆进去了(此时在项目里就可以用admin账号)
从上图中我们可以看到rabbitmq的一些基本情况,如Connections、Channels、Exchanges、Queues,最右边的admin选项卡可以看到所有的用户情况,也可以创建用户,大家可以自行点开看一下,熟悉一下RabbitMQ Server的服务端。
另外,除了在上面web页面直接操作外,也完全可以在虚拟机下使用命令行的方式进行操作管理,执行:rabbitmqctl help,会出现所有的指令帮助,通过 rabbitmqctl xxx 形式进行执行
这里附带介绍RabbitMQ的一些基本概念:
关键字 | 说明 |
---|---|
Broker | 消息队列服务器的实体,是一个中间件应用,负责接收生产者的消息,然后将消息发送至消息接收者或其他的Broker |
Exchange | 消息交换机,是消息第一个到达的地方,消息通过它指定的路由规则,分发到不同的消息队列中去 |
Queue | 消息队列,消息通过发送和路由之后最终到达的地方。到达Queue的消息即进入等待消费的状态,每个消息都会被发送到一个或多个队列 |
Binding | 绑定,它的作用就是把Exchange和Queue按照路由规则绑定起来,也就是Exchange和Queue之间的虚拟连接 |
Routing Key | 路由关键字,Exchange 根据这个关键字进行消息投递 |
Virtual host | 虚拟主机,它是对Broker的虛拟划分,将消费者、生产者和它们依赖的AMQP相关结构进行隔离,一般都是为了安全考虚。比如,我们可以在一一个Broker中设置多个虚拟主机,对不同用户进行权限的分离 |
Connection | 连接,代表生产者、消费者、Broker之间进行通信的物理网络 |
Channel | 消息通道,用于连接生产者和消费者的逻辑结构。在客户端的每个连接里,可建立多个Channel,每个Channel代表一个会话任务,通过Channel可以隔离同一连接中的不同交互内容 |
Producer | 消息生产者,制造消息并发送消息的程序 |
Consumer | 消息消费者,接收消息并处理消息的程序 |
消息投递到队列的整个过程大致如下:
1、客户端连接到消息队列服务器,打开一个Channel
2、客户端声明一个Exchange,并设置相关属性
3、客户端声明一个Queue,并设置相关属性
4、客户端使用Routing Key,在Exchange和Queue之间建立好绑定关系
5、客户端投递消息到Exchange
6、Exchange接收到消息后,根据消息的Key和已经设置的Binding,进行消息路由,将消息投递到一个或多个Queue里
到这里,RabbitMQ 的安装已经全部完成了,如果跟着这步骤来,保证是OK的。