Nerijus está certo, esse problema é causado pelo HAProxy ter um tempo limite do cliente, o que significa que, se a conexão for considerada inativa por mais de X ms, a conexão será interrompida.
O TCP pode enviar pacotes de manutenção para garantir que uma conexão ociosa permaneça aberta.
Você pode verificar seu parâmetro TCP para manter os pacotes ativos usando o seguinte comando:
$ cat /proc/sys/net/ipv4/tcp_keepalive_time
Por padrão, essa configuração é igual a 7200 segundos, o que significa que o TCP começará a enviar pacotes keep-alive somente após uma conexão ficar ociosa por mais de 2 horas.
Portanto, basta atualizar o valor do tempo limite do cliente HAProxy para algo > 2 horas, por exemplo:
timeout client 3h
Adicione a opção clitcpka ao seu back-end:
backend rabbitmq_backend
balance roundrobin
mode tcp
option clitcpka
server 0-rabbitmq_backend x.x.x.x:5672 maxconn 4000 check
server 1-rabbitmq_backend x.x.x.x:5672 maxconn 4000 check