Centos 7 下 安装 RabbitMQ 与初始配置

RabbitMQ 是一个免费的开源企业消息代理软件,它是用Erlang编写的,MQ 全称为 Message Queue。它提供所有主要编程语言的客户端库。是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信 ,它支持多种消息传递协议,消息队列,传送确认,灵活的路由到队列,多种交换类型。它还提供易于使用的HTTP-API,命令行工具和用于管理 RabbitMQ 的 Web UI,RabbitMQ 是一个在 AMQP 基础上完整的,可复用的企业消息系统。他遵循 Mozilla Public License 开源协议。

RabbitMQ WIKI:https://zh.wikipedia.org/zh/RabbitMQ
RabbitMQ 百科:http://baike.baidu.com/view/4095865.htm
RabbitMQ 官网:http://www.rabbitmq.com/
RabbitMQ 官网下载:http://www.rabbitmq.com/download.html
RabbitMQ 官网安装文档:http://www.rabbitmq.com/install-rpm.html
RabbitMQ 文档:
优先:http://www.rabbitmq.com/getstarted.html
次要:http://www.rabbitmq.com/documentation.html

注意安装完 RabbitMQ 后不要修改主机名,否则 RabbitMQ 可能会崩掉

安装erlang依赖环境

yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel

配置 Erlang 源

cat >> /etc/yum.repos.d/rabbitmq_erlang.repo << EOF
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/22/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
EOF

配置 RabbitMQ 源

cat >> /etc/yum.repos.d/rabbitmq << EOF
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7/
gpgcheck=0
repo_gpgcheck=0
enabled=1
EOF
 yum clean all
 yum makecache

添加EPEL源:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

导入GPG密钥:

rpm -import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc

yum 安装 socat 软件包

yum -y install socat

上传安装包到服务器的 或者使用下面地址下载

wget https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/22/el/7/x86_64/erlang-22.0.7-1.el7.x86_64.rpm
wget https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7/noarch/rabbitmq-server-3.7.17-1.el7.noarch.rpm

因为rabbitMQ是Erlang语言编写的,所以我们首先需要安装 Erlang

rpm -Uvh erlang-22.0.7-1.el7.x86_64.rpm
rpm -Uvh rabbitmq-server-3.7.17-1.el7.noarch.rpm

访问RabbitMQ Web管理控制台:

rabbitmq-plugins enable rabbitmq_management

将RabbitMQ文件的所有权提供给RabbitMQ用户

chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie

检查Erlang版本

erl -version

配置 RabbitMQ
RabbitMQ 默认guest默认用户不可以在非本地环境登录,做如下配置后可以在分本地环境登录:

cd /usr/share/doc/rabbitmq-server-3.7.17
/bin/cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

编辑 rabbitmq.config

vim /etc/rabbitmq/rabbitmq.config
%% {loopback_users, []},

改为:

{loopback_users, []}

启动 RabbitMQ 服务

systemctl start rabbitmq-server

开机启动 rabbitMQ 服务

systemctl enable rabbitmq-server

检查 RabbitMQ 服务器的状态

systemctl status rabbitmq-server
netstat -antup | grep 15672

查看rabbitmq进程

ps -aux|grep rabbitmq

显示当前所有用户

rabbitmqctl  list_users

新增 rabbitmq 用户

rabbitmqctl add_user admin admin_fooher.com

设置 admin 用户权限为超级管理员权限

rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions  -p  '/'  admin '.' '.' '.'

默讣用户名和密码: guest/guest 。guest 用户仅允许从在服务器以 localhost 戒 127.0.0.1 作为 ip 登录.

添加防火墙规则

systemctl unmask firewalld.service
systemctl daemon-reload
systemctl restart firewalld.service
systemctl start firewalld
systemctl status firewalld
firewall-cmd --permanent --zone=public --add-port=15672/tcp

加载防火墙配置

firewall-cmd --reload

显示开启防火墙端口列表

firewall-cmd --zone=public --list-ports

或者:

yum -y install iptables-services
systemctl enable iptables.service
iptables -I INPUT 8 -p tcp -m state --state NEW -m tcp --dport 15672 -j ACCEPT
service iptables save
service iptables restart

rabbitmqctl 基础命令介绍
查看命令:

rabbitmqctl
rabbitmqctl list_queues

关闭应用

rabbitmqctl stop_app

启动应用,和上述关闭命令配合使用,达到清空队列的目的

rabbitmqctl start_app

清除所有队列

rabbitmqctl reset

用户名: admin
密码:    fooher.com
访问 RabbitMQ 的管理面板 http://www.fooher.com:15672

更多用法及参数,可以执行如下命令查看

rabbitmqctl

(1)首先关闭rabbitmq: rabbitmqctl stop_app
(2)还原: rabbitmqctl reset
(3)启动: rabbitmqctl start_app
(4)添加用户: rabbitmqctl add_user root root
(5)设置权限:rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
(6)查看用户: rabbitmqctl list_users
(7)删除用户:rabbitmqctl delete_user root
(8)修改密码:rabbitmqctl change_password root 123456
(9)清除密码:rabbitmqctl clear_password root

几个概念说明:
Broker:简单来说就是消息队列服务器实体。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
Producer:消息生产者,就是投递消息的程序。
Consumer:消息消费者,就是接受消息的程序。
Channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

消息队列的使用过程:
1、客户端连接到消息队列服务器,打开一个channel。
2、客户端声明一个exchange,并设置相关属性。
3、客户端声明一个queue,并设置相关属性。
4、客户端使用routing key,在exchange和queue之间建立好绑定关系。
5、客户端投递消息到exchange。
6、exchange接收到消息后,就根据消息的key和已经设由binding,进行消息路里,将消息投递到一个或多个队列里
ps:通过durable参数来进行exchang、queue、消息持久化