rabbitmq集群配置搭建
mq队列(http://88250.b3log.org/rabbitmq-clustering-ha)
一.安装EPEL库
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
二.安装erlang
yum install erlang
强制安装erlang
rpm –force -i erlang-20.3-1.el6.x86_64.rpm
三.rabbitmq
1.安装
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.0/rabbitmq-server-3.5.0-1.noarch.rpm
rpm -ivh rabbitmq-server-3.5.0-1.noarch.rpm
rpm -ivh –nodeps rabbitmq-server-3.7.6-1.el6.noarch.rpm
2.启动服务:service rabbitmq-server start
启动维护插件:rabbitmq-plugins enable rabbitmq_management
重启服务:service rabbitmq-server restart
3.添加用户:rabbitmqctl add_user test 123456
修改密码:rabbitmqctl change_password Username 123456
4.添加管理员权限:rabbitmqctl set_user_tags test administrator
5.访问端口15672
6.设置账号权限:rabbitmqctl set_permissions -p “/“ test “.“ “.“ “.*”
3.添加用户:rabbitmqctl add_user huashu 123456
4.添加用户权限 rabbitmqctl set_permissions huashu “.“ “.“ “.*”
5.添加管理员权限:rabbitmqctl set_user_tags huashu administrator
四.rabbitmq集群配置
1.修改 /etc/hosts
加入集群节点的描述:
ip1 app-server1
ip2 app-server2
2.设置erlang cookie
文件路径:/var/lib/rabbitmq/.erlang.cookie
将app-server1的文件值复制到app-server2中
先修改app-server2中的文件权限 #chmod 777 /var/lib/rabbitmq/.erlang.cookie
复制好后把文件权限改回去 #chmod 400 /var/lib/rabbitmq/.erlang.cookie
3.使用-detached参数运行各节点
# rabbitmqctl stop
# rabbitmq-server -detached
4.组成集群
将app-server1和app-server2组成集群,将app-server2加入app-server1
app-server2# rabbitmqctl stop_app
app-server2# rabbitmqctl join_cluster rabbit@app-server1
app-server2# rabbitmqctl start_app
查看集群配置是否成功:rabbitmqctl cluster_status
5.修改磁盘节点为内存节点
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
6.设置镜像队列策略
在任意一个节点上执行rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:”all”}’
rabbitmqctl set_policy -p / ha-allqueue “^” ‘{“ha-mode”:”all”}’
修改mq节点属性:rabbitmqctl change_cluster_node_type ram
可以参考:https://www.jianshu.com/p/db0f5496f0d2
rabbitmq 防止消息丢失
队列和消息定义都要持久化
Exchange持久化 、Queue持久化、 Message持久化
1 | * mq助手,解决发送和接收问题 |
死信队列
DLX 是一个普通的交换器,可以在任何队列上设置,当死信消息出现时,RabbitMQ 自动将这个 消息重新发布到设置的 DLX 上,从而被路由到另一个队列,即 死信队列
在队列定义时,使用 x-dead-letter-exchange
参数来为这个队列添加 DLX
1 | final Channel channel = connection.createChannel(); |