Pergunta

Tenho alguns scripts, usando pika.SelectConnection para me comunicar com o servidor RabbitMq.

Existe alguma maneira de fazer esses scripts tentarem se reconectar automaticamente ao servidor rmq, no caso de o servidor cair, enquanto o script está funcionando?

Foi útil?

Solução

Tenho muitos scripts que usam a seguinte abordagem para reconectar:

 while True:
     try:
         mqExch.channel.connection.drain_events(timeout=25)
     except socket.timeout:
         hb.beat() # let our supervisor know we are not hung

Não é usar pika, mas Kombu, mas os princípios podem ser aplicados.O método drain_events é o núcleo do consumo de mensagens, ou seja, ele entra em loop para receber mensagens continuamente e executar um retorno de chamada para processar a mensagem.Como você pode ver aqui, a biblioteca de soquetes de baixo nível atinge o tempo limite a cada 25 segundos.Com algumas bibliotecas, tive que corrigir algumas linhas de código para fazer esse comportamento funcionar sem travar dentro do módulo.

Em qualquer caso, a pulsação enviada por hb.beat é monitorada por um processo supervisor e este processo irá matar o script se houver muitas falhas em um intervalo de tempo muito curto.Depois de encerrar o script, o supervisor o reinicia.Isso funcionou bem ao lidar com erros de rede intermitentes ou reinicializações do broker MQ.Embora eu pudesse ter feito meu script reconectar, era mais simples encerrar e reiniciar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top