HAProxy + RabbitMQ,保持连接活着

我正在尝试将HAProxy设置为RabbitMQ群集上的负载平衡器。 我使用这样的configuration:

global log /dev/log local0 debug log /dev/log local1 debug chroot /var/lib/haproxy user haproxy group haproxy defaults log global retries 2 timeout connect 5000 timeout server 50000 timeout client 50000 listen rabbitmq-cluster bind my.pu.blic.ip:5672 mode tcp option tcpka option redispatch balance roundrobin server rabbit1 rabbit1:5672 check inter 5000 downinter 500 server rabbit2 rabbit2:5672 check inter 5000 downinter 500 server rabbit3 rabbit3:5672 check inter 5000 downinter 500 

我的问题是,应该保持与rabbitmq服务器连接的客户端每隔50秒closures一次连接。 有没有我忘记的选项,或者我应该只是增加超时到一些更高的价值,以减轻这个问题?

谢谢!

看起来你的客户端build立了连接,但是在AMQP握手之后,没有其他的活动(通常情况是当消费者正在等待队列中的数据,但是队列为空时)。

从您发布的configuration中,超时设置为50秒,因此在没有networking活动超过该连接的情况下,预计在50秒后closures连接。

要处理这个问题,你可以增加超时到合理的用例值或启用心跳 (参见Hearbeat部分),另外看看configuration手册(请参阅hearbeat选项说明)。 在你的情况下,你必须改变心跳值低于50秒,比如timeout / 3四舍五入…说15。

正常情况下,当使用听力时,在最后一次连接活动之后的听取时间间隔之后发送听力信号帧。 当三个听筒帧失败时(需要3个听筒间隔)连接应该由服务器或客户端强制closures而不需要任何握手。