安装
安装是基于Centos 7.2.1511
安装Erlang
[root@localhost rabbitmq]# curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
[root@localhost rabbitmq]# yum install erlang
安装RabbitMQ
[root@localhost rabbitmq]# curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
[root@localhost rabbitmq]# yum install rabbitmq-server
我安装的版本是3.7.15
启动RabbitMQ
# 设置开启启动
[root@localhost rabbitmq]# chkconfig rabbitmq-server on
# 启动服务
[root@localhost rabbitmq]# systemctl start rabbitmq-server
# 停止服务
[root@localhost rabbitmq]# systemctl stop rabbitmq-server
# 开放端口,默认端口为5672
[root@localhost rabbitmq]# firewall-cmd --zone=public --add-port=5672/tcp --permanent # 开放端口
[root@localhost rabbitmq]# firewall-cmd --reload # 重启防火墙
# 查看服务是否启动
[root@localhost rabbitmq]# systemctl status rabbitmq-server.service
监控后台配置
- 复制文件
- 将/usr/share/doc/rabbitmq-server-3.7.15/ 目录下复制一份模板到 /etc/rabbitmq 目录下进行修改
在3.8.2的版本中,直接通過命令find / -name rabbit.app查找rabbit.app文件進行修改[root@localhost rabbitmq-server-3.7.15]# cd /usr/share/doc/rabbitmq-server-3.7.15/ [root@localhost rabbitmq-server-3.7.15]# cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
- 修改配置文件
%%
%% Security, Access Control
%% ========================
%%
%% Related doc guide: https://www.rabbitmq.com/access-control.html.
%% The default "guest" user is only permitted to access the server
%% via a loopback interface (e.g. localhost).
{loopback_users, []} # 将原文件的注释去掉,并且去掉最后一个,号。将[]中的内容去掉
%%
%% Uncomment the following line if you want to allow access to the
%% guest user from anywhere on the network.
%% {loopback_users, []},
%% TLS configuration.
%%
如果不修改,那么远程将无法访问,默认只能通过localhost访问
- 加载监控插件并开放端口
[root@localhost rabbitmq-server-3.7.15]# rabbitmq-plugins enable rabbitmq_management # 启用监控插件,默认端口为15672
[root@localhost rabbitmq-server-3.7.15]# firewall-cmd --zone=public --add-port=15672/tcp --permanent # 开放端口
[root@localhost rabbitmq-server-3.7.15]# firewall-cmd --reload # 重启防火墙
- 访问监控后台
在浏览器中输入http://服务器IP:15672即可访问,默认用户名和密码guest/guest,也可以新增用户,命令如下
[root@localhost rabbitmq-server-3.7.15]# rabbitmqctl add_user admin admin # 添加用户rabbitmqctl add_user 用户名 密码
[root@localhost rabbitmq-server-3.7.15]# rabbitmqctl set_user_tags admin administrator # 赋予用户管理员角色rabbitmqctl set_user_tags 用户名 administrator
[root@localhost rabbitmq-server-3.7.15]# rabbitmqctl list_users # 查看用户及角色
[root@localhost rabbitmq-server-3.7.15]# rabbitmqctl list_permissions -p / # 查看用户权限
[root@localhost rabbitmq-server-3.7.15]# rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*" # 设置用户权限
RabbitMQ介绍
这是RabbitMQ大致的流程图,下面将分别介绍下里面的元素
- Queue:队列,存储消息,队列的特性是先进先出,消费者(client)消费Queue中的消息,可以多个消费者消费一个队列,Queue会将消息以轮询的方式平分给这些消费者,这样容易导致一个问题,就是某些消费者处理慢的话会忙个不停,有些消费者处理快的会空闲。prefetchCount参数可以用来处理这种情况,当这个参数为1时,表示队列只有在收到消费者发回的上一条消息 ack 确认后,才会向该消费者发送下一条消息。prefetchCount 的默认值为0,即没有限制,队列会将所有消息尽快发给消费者。
- Exchange:交换机,RabbitMQ有4种交换机类型
- Direct,直接交换机,把消息路由到完全匹配的队列中
- Topic,主题交换机,把消息路由到模糊匹配的队列中,该交换机的路由模式必须包含*或者#
- Fanout,扇形交换机,会把消息发给绑定给它的全部队列,不管路由键或者是路由模式,如果配置了routing_key会被忽略。
- Headers,属性交换机,会获取消息的headers(也是一个键值对的形式),对比其中的键值对是否完全匹配Queue与Exchange绑定时指定的键值对;如果完全匹配则消息会路由到该Queue,否则不会路由到该Queue,使用的较少。