Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么haproxy/rabbitmq用户偶尔会被卡住?_Rabbitmq_Haproxy - Fatal编程技术网

为什么haproxy/rabbitmq用户偶尔会被卡住?

为什么haproxy/rabbitmq用户偶尔会被卡住?,rabbitmq,haproxy,Rabbitmq,Haproxy,需要关于组合的帮助和/或想法:haproxy+rabbitmq 拓扑结构: 由3个rabbitmq代理组成的集群,队列的复制策略{ha模式:all} 具有业务逻辑的java应用程序在少数节点上运行 haproxy与上面的每个java应用程序都在同一个节点上运行,代理到rabbitmq集群 在java应用程序之间流动的消息每天以十万计,每个队列的数量约为20 问题: 偶尔,每隔几天,消息就会堆积在队列中,java端的消费者似乎处于空闲或停滞状态 重新启动haproxy解决了问题,消费者重新连

需要关于组合的帮助和/或想法:haproxy+rabbitmq

拓扑结构

  • 由3个rabbitmq代理组成的集群,队列的复制策略{ha模式:all}
  • 具有业务逻辑的java应用程序在少数节点上运行
  • haproxy与上面的每个java应用程序都在同一个节点上运行,代理到rabbitmq集群
  • 在java应用程序之间流动的消息每天以十万计,每个队列的数量约为20
问题

  • 偶尔,每隔几天,消息就会堆积在队列中,java端的消费者似乎处于空闲或停滞状态
  • 重新启动haproxy解决了问题,消费者重新连接、恢复并最终成功清空队列
注释

  • 日志中没有错误,我已经设置了ExceptionHandler,并且很好地记录了所有事情
问题

  • 这个问题的根本原因是什么
haproxy.cfg:

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的连接无论出于何种原因都不健康。当检测到问题时,已完成发布。消息只是排在队列中,不会传递给消费者。