注意: 使用 CentOS-7-x86_64 使用 CentOs6也行
安装依赖
yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
安装Erlang
需要到网上下载
erlang-18.3-1.el7.centos.x86_64.rpm
socat-1.7.3.2-5.el7.lux.x86_64.rpm
rabbitmq-server-3.6.5-1.noarch.rpm
链接:https://pan.baidu.com/s/1WHIzqAUnoJBYBliI2n5UWQ
提取码:1234
创建一个文件 shareFolder 将上面下载的东西都放到这个文件里
然后利用宝塔终端或者SSH工具将shareFolder文件上传到 /usr/local/src
然后cd 进入到 shareFolder个文件里 开始下面的操作
使用yum更新安装依赖
sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y
如果遇到
Cannot retrieve metalink for repository: fedora. Please verify its path and try again
或者是
Cannot retrieve metalink for repository: epel. Please verify its path and try again
解决方法
执行如下命令:
su -c "sed -i 's|^#baseurl|baseurl| ; s|^mirrorlist|#mirrorlist|' /etc/yum.repos.d/*"
下载rpm包
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-utils-2.17-55.el6.x86_64.rpm &&
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-static-2.17-55.el6.x86_64.rpm &&
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm &&
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm &&
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm &&
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm &&
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/nscd-2.17-55.el6.x86_64.rpm
安装rpm包
sudo rpm -Uvh *-2.17-55.el6.x86_64.rpm --force --nodeps
安装完毕后查看glibc版本,发现glibc版本已经到2.17了
strings /lib64/libc.so.6 | grep GLIBC
注意:这里如果没有出现 2.17那么 下面的 步骤就无法实现 上百度找原因
安装RabbitMQ
# 安装erlang
rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
# 安装 socat
rpm -ivh socat-1.7.3.2-1.1.el7.x86_64.rpm
# 安装 rabbitmq
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
如果在安装的过程中出现类似以下错误:
说明gblic 版本太低 errorr错误 到到百度找解决办法 一般情况下 升级glibc就行了
开启管理界面及配置
# 开启管理界面
rabbitmq-plugins enable rabbitmq_management
设置配置文件
cd /usr/share/doc/rabbitmq-server-3.6.5/
cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
服务
service rabbitmq-server start # 启动服务
service rabbitmq-server stop # 停止服务
service rabbitmq-server restart # 重启服务
service rabbitmq-server status # 状态查询
关闭防火墙
systemctl stop firewalld.service && systemctl disable firewalld.service
如果不关闭防火墙那么是无法访问RabbitMQ的
创建用户
rabbitMq从3.x之后不允许用guest用户登录,可以使用下面的方法解决
(1)首先查看当前的用户信息:rabbitmqctl list_users
[root@ls-P2EqsUP3 rabbitmq-server-3.6.5]# rabbitmqctl list_users
Listing users ...
(2)新增一个用户 rabbitmqctl add_user Username Password (用户名和密码均为root)
[root@ls-P2EqsUP3 rabbitmq-server-3.6.5]# rabbitmqctl add_user root root
Creating user "root" ...
(3)为新用户(root)设置超级管理员的权限(这样就和guest用户是同样的功能了)
[root@ls-P2EqsUP3 rabbitmq-server-3.6.5]# rabbitmqctl set_user_tags root administrator
Setting tags for user "root" to [administrator] ...
(4)重启rabbitmq: service rabbitmq-server restart
(5)再次查看用户列表: rabbitmqctl list_users
[root@ls-P2EqsUP3 rabbitmq-server-3.6.5]# rabbitmqctl list_users
Listing users ...
root [administrator]
接下来就可以用root用户来进行登录了。
配置虚拟主机及用户
RabbitMQ在安装好后 启动服务,可以访问http://ip地址:15672
;
如果ip地址不知道 使用 ifconfig 查询 ,这是我的访问地址 http://192.168.216.128:15672
使用我们自己创建的超级管理员 用户名root和密码root
;如果需要创建自定义用户;那么也可以登录管理界面后,如下操作:
最上侧的导航是:概览、连接、信道、交换器、队列、用户管理
点击Admin
发现没有配置虚拟机,那么我们需要给root绑定一个虚拟机,默认虚拟机是/
创建新用户
角色权限说明:
1、 超级管理员(administrator)
可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
2、 监控者(monitoring)
可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
3、 策略制定者(policymaker)
可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息
4、 普通管理者(management)
仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
5、 其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
创建完成后
Virtual Hosts配置 (虚拟机配置)
像mysql拥有数据库的概念并且可以指定用户对库和表等操作的权限。RabbitMQ也有类似的权限管理;在RabbitMQ中可以虚拟消息服务器Virtual Host,每个Virtual Hosts相当于一个相对独立的RabbitMQ服务器,每个VirtualHost之间是相互隔离的。exchange、queue、message不能互通。 相当于mysql的db。Virtual Name一般以/xxx
开头。
比如我添加一个虚拟机名称 /itcast
接下来 我们就将我们创建的虚拟机和创建账号绑定
点击我们创建的itcast
然后我们回到 用户页面
可以看到 绑定成功
然后 使用 我们创建的 admin用户 来重新登录下
交换机的类型
RabbitMQ有四种交换机类型:
- 直连交换机:Direct exchange
- 扇形交换机:Fanout exchange
- 主体交换机:Topic exchange
- 首部交换机:Headers exchange
直连交换机
处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键 “abc”,则只有被标记为“abc”的消息才被转发,不会转发abc.def,也不会转发dog.ghi,只会转发abc。
扇形交换机
将消息路由给绑定到它身上的所有队列,不同于直连交换机,路由键在此类型上不启任务作用
如果N个队列绑定到某个扇形交换机上,当有消息发送给此扇形交换机时,交换机会将此消息发送给这所有的N个队列 ,队列只不过少了路由键,直接绑定到交换机上
主题交换机
将路由键和某模式进行匹配。此时队列需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“”匹配不多不少一个词。因此“abc.#”能够匹配到“abc.def.ghi”,但是“abc.” 只会匹配到“abc.def”。将路由键和某模式进行匹配。此时队列需要绑定要一个模式上。符号#
匹配一个或多个词,*
符号用来代替任意单词
- 当一个队列以”#”作为绑定键时,它将接收所有消息,而不管路由键如何,类似于fanout型交换器。
- 当特殊字符”*”、”#”没有用到绑定时,topic型交换器就好比direct型交换器了。
头部交换机
不处理路由键。而是根据发送的消息内容中的headers属性进行匹配。在绑定Queue与Exchange时指定一组键值对;当消息发送到RabbitMQ时会取到该消息的headers与Exchange绑定时指定的键值对进行匹配;如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers属性是一个键值对,可以是Hashtable,键值对的值可以是任何类型。而fanout,direct,topic 的路由键都需要要字符串形式的。
匹配规则x-match有下列两种类型:
-
x-match = all :表示所有的键值对都匹配才能接受到消息
-
x-match = any :表示只要有键值对匹配就能接受到消息