RabbitMQ não fecha conexões inativas com mensagens não armazenadas

3

Estou tendo alguns problemas com o RabbitMQ e conexões inativas. Eu tenho um servidor RabbitMQ e muitas instâncias ec2 que conectam e consomem messagens deste servidor. O problema é que, às vezes, quando eu preciso finalizar uma instância ec2, sua conexão com o servidor RabbitMQ não é fechada.

Por causa disso, começamos a ver mensagens não colocadas que nunca voltam ao estado pronto. O que eu faço atualmente é usar rabbitmqctl para remover essas conexões e / ou usar um script python que eu escrevi para matar qualquer conexão que esteja ociosa por mais de X dias.

Eu já tentei usar a opção heatrbeat [1] RabbitMQ, mas o problema ainda ocorre. O que eu gostaria de fazer é fechar automaticamente todas as conexões "inoperantes" (ociosas por um longo tempo).

Isso é algo que eu defino no lado do cliente, em vez do lado do servidor?

O RabbitMQ é 3.3.4 e usamos py-amqp [2] nos clientes.

[1] link [2] link

    
por Dalton Barreto 15.09.2014 / 15:57

1 resposta

1

Nós vimos problemas semelhantes e estamos usando um cliente PHP que não suporta heartbeat.

Nossa solução é desligar todos os processos do consumidor antes que as instâncias sejam encerradas, para que todas as conexões sejam desconectadas de forma limpa. O AFAIK EC2 tentará um desligamento e você terá cerca de um minuto antes que a máquina seja desligada.

Exemplo:

[1] link

    
por 18.09.2014 / 04:41

Tags