博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Rabbitmq高级特性及集群
阅读量:3922 次
发布时间:2019-05-23

本文共 2270 字,大约阅读时间需要 7 分钟。

死信队列 : DLX(死信交换机)

当消息变成死亡消息后,重新发送到另一个交换机(死信交换机,是正常的交换机)上,这个就是死信队列;
生产者往交换机A带上一个路由key中发消息,发到A队列(带着路由key)上,A队列上的这个A消息(带着路由key)过了一定时间还没有被消费掉,那么将消息(带着路由key)发送到B交换机上,B交换机将消息发到B队列上;再写个C监听器去监听B队列上的消息

延迟队列:(生产者)

1. 定义正常交换机(order_exchange)和队列(order_queue)
2. 定义死信交换机(order_exchange_dlx)和队列(order_queue_dlx)
3. 绑定,设置正常队列过期时间为30分钟(这边设置10秒)

消费者 C为消费者,去监听B队列

1、死信交换机和死信队列和普通的没有区别

2、当消息成为私信后,如果该队列绑定了死信交换机,则消息会被死信交换机重新路由到死信队列
3、消息成为死信的三种情况;
①队列消息长度达到限制
②消费者拒接消费消息,并且不重回队列
③原队列存在消息过期设置,消息到达超时时间未被消费
延时队列:TTL

这边设置10秒的过期时间,10秒后这个消息还没有被消费,那么将会被自动清除

消息积压
1、消费者宕机
2、消费能力不足积压
3、发送者流量太大
解决方案:1、上线更多的消费者;2、上线一批专门的队列消费服务;3、将消息先批量取出来记录到数据库中再慢慢处理;
消息幂等性保障
服务器的错误判断可能会发送两天完全一样的消息给你,要求你去操作。而幂等性就是不管你发多少条消息过来,如果这个消息时完全一样的,那么我们处理这条消息的结果将是一致的。比如我们库存为100,客户端发送请求要求我们为xxx客户取一条数据,但是发送的流水是一样的,也就是说这条消息是完全一样的。这时不管他发了几次要求我们为xxx客户取一条数据,把库存减1,最终我们得到的结果都是99.也就是说不管请求多少次-1.我们都只做一次减一的操作;
使用乐观锁机制来做,使用redis等来做都是可以的。给消息添加唯一值,请求多少次都是一样的。
集群
分别搭建两台Rabbitmq,设置别名为m1和m2;
保证他的两个文件erlang.cookie文件是一样的,复制同一份即可;
设置让mq不去接收用户的请求,设置让m1和m2建成一个集群;‘然后设置让mq去接收用户请求;重启mq服务即可;
以上操作达成的效果:m1会同步m2的消息,互相的;
集群需要保证高可用,如果我们连了m1如果m1挂了,m2就也不能用了,这样肯定不行的,没有保证高可用;
我们需要创建一个代理去管理这两个mq;
安装HAProxy代理:
修改其配置文件:
删除maxconn 3000以下所有内容,然后添加对mq的监听设置;
listen rabbitmg cluster
bind 0.0.0.0:5672#通过5672对M1, M2进行映射
option tcplog #记录tcp连接的状态和时间
mode tcp#四层协议代理,即对TCP协议转发
option clitcpka #开启TCP的Keep Alive. (长连接模式)
timeout connect 1s #haproxy与mq建立连接的超时时间
timeout client 10s#客户端与haproxy最大空闲时间。
timeout server 10s #服务器与haproxy最大空闲时间
balance roundrobin #采用轮询转发消息
#每5秒发送一次心跳包,如连续两次有响应则代表状态良好。
#如连续三次没有响应,则视为服务故障,该节点将被剔除。
server node1 192.168.132.137:5672 check inter 5s rise 2 fall 3
server node2192.168.132.139:5672 check inter 5s rise 2 fall 3
listen http front
#监听端口
bind 0.0.0.0:1080
#统计页面自动刷新时间stats refresh 30s
#统计页面url
stats uri /haproxy?stats
#指定HAproxy访问用户名和密码设置
stats auth admin:admin

我们代码连接代理的ip就可以了;

转载地址:http://esqrn.baihongyu.com/

你可能感兴趣的文章
Leetcode 58. 最后一个单词的长度
查看>>
Leetcode 61. 旋转链表
查看>>
Leetcode 66. 加一
查看>>
Leetcode 73. 矩阵置零
查看>>
Leetcode 60. 排列序列
查看>>
Leetcode 77. 组合
查看>>
Leetcode 74. 搜索二维矩阵
查看>>
Leetcode 86. 分隔链表
查看>>
Leetcode 92. 反转链表 II
查看>>
Leetcode 88. 合并两个有序数组
查看>>
Leetcode 89. 格雷编码
查看>>
Leetcode 67. 二进制求和
查看>>
Leetcode 69. x 的平方根
查看>>
进程、线程与协程
查看>>
Mysql中数据库引擎 INNODB
查看>>
模式1. 简单工厂模式-Java
查看>>
Leetcode 97. 交错字符串
查看>>
Leetcode 26. 删除有序数组中的重复项
查看>>
Leetcode 80. 删除有序数组中的重复项 II
查看>>
python字典赋初值
查看>>