为什么haproxy/rabbitmq用户偶尔会被卡住?
需要关于组合的帮助和/或想法:haproxy+rabbitmq 拓扑结构:为什么haproxy/rabbitmq用户偶尔会被卡住?,rabbitmq,haproxy,Rabbitmq,Haproxy,需要关于组合的帮助和/或想法:haproxy+rabbitmq 拓扑结构: 由3个rabbitmq代理组成的集群,队列的复制策略{ha模式:all} 具有业务逻辑的java应用程序在少数节点上运行 haproxy与上面的每个java应用程序都在同一个节点上运行,代理到rabbitmq集群 在java应用程序之间流动的消息每天以十万计,每个队列的数量约为20 问题: 偶尔,每隔几天,消息就会堆积在队列中,java端的消费者似乎处于空闲或停滞状态 重新启动haproxy解决了问题,消费者重新连
- 由3个rabbitmq代理组成的集群,队列的复制策略{ha模式:all}
- 具有业务逻辑的java应用程序在少数节点上运行
- haproxy与上面的每个java应用程序都在同一个节点上运行,代理到rabbitmq集群
- 在java应用程序之间流动的消息每天以十万计,每个队列的数量约为20
- 偶尔,每隔几天,消息就会堆积在队列中,java端的消费者似乎处于空闲或停滞状态
- 重新启动haproxy解决了问题,消费者重新连接、恢复并最终成功清空队列
- 日志中没有错误,我已经设置了ExceptionHandler,并且很好地记录了所有事情
- 这个问题的根本原因是什么
global
log 127.0.0.1 local1
maxconn 4096
daemon
user haproxy
group haproxy
defaults
timeout client 50000
timeout server 50000
timeout connect 5000
log global
mode tcp
retries 3
maxconn 2000
option redispatch
option tcplog
listen ampq
bind *:5672
mode tcp
balance leastconn
timeout client 3h
timeout server 3h
stick match src
stick-table type ip size 200k expire 30m
option clitcpka
server rabbit1 10.6.1.1:5672 check inter 1s rise 3 fall 1
server rabbit2 10.6.1.2:5672 check inter 1s rise 3 fall 1
server rabbit3 10.6.1.3:5672 check inter 1s rise 3 fall 1
很难说,但是
消息堆积在队列中,java端的消费者似乎处于空闲或停滞状态
实际上是相反的-消息堆积是因为消费者速度慢、死了等等,我们倾向于认为消费者死了,因为通过haproxy的连接无论出于何种原因都不健康。当检测到问题时,已完成发布。消息只是排在队列中,不会传递给消费者。