Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 24043|Resposta: 0

[WinForm] .net/c# Desconexão e reconexão da conexão RabbitMQ

[Copiar link]
Publicado em 29/03/2018 16:30:04 | | | |
O código oficial de exemplo para consumidores NET fornecido pelo Rabbitmq é o seguinte, mas durante o processo de uso, você encontrará o problema de desconexão da conexão; uma vez desconectado, esse código reportará um erro, o que fará com que consumidores ou produtores desliguem.

A imagem a seguir mostra o produtor enviando uma mensagem, eu parei o rabbitmq manualmente e depois reiniciei o rabbitmq, provavelmente depois que o início foi bem-sucedido, esperei mais 10 segundos para impedir que o serviço começasse completamente

Depois que o serviço está totalmente iniciado, tento reenviar algumas mensagens com erros como segue:

Texto incomum **************
RabbitMQ.Client.Exceptions.AlreadyClosedException: Already closed: The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=320, text="CONNECTION_FORCED - broker forced connection closure with reason 'shutdown'", classId=0, methodId=0, cause=
   Em RabbitMQ.Client.Impl.SessionBase.Transmit(Command cmd)
   em RabbitMQ.Client.Impl.ModelBase.ModelSend(método MethodBase, cabeçalho ContentHeaderBase, corpo Byte[])
   em RabbitMQ.Client.Impl.ModelBase.BasicPublish(Troca de strings, String routingKey, Boolean obrigatório, IBasicProperties basicProperties, Byte[] corpo)
   em RabbitMQ.Client.Impl.ModelBase.BasicPublish(Troca de strings, Chave de roteamento de strings, IBasicProperties basicProperties, corpo Byte[])
   Em rabbitMQ_Publish.Form1.button1_Click(Object sender, EventArgs e) posição C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: linha número 37
   Em System.Windows.Forms.Control.OnClick(EventArgs e)
   Em System.Windows.Forms.Button.OnClick(EventArgs e)
   Em System.Windows.Forms.Button.PerformClick()
   em System.Windows.Forms.Form.ProcessDialogKey(KeykeyData)
   em System.Windows.Forms.TextBoxBase.ProcessDialogKey(KeyKeyData)
   Em System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   Em System.Windows.Forms.Control.PreProcessControlMessageMessageInternal(Control target, Message& msg)
   Em System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)





Então, como pode ser recuperado de forma anormal? Ou está desconectado e reconectado?

O código-fonte do RabbitMQ NET Client, a pesquisa encontrou umRecuperaçãoAutomáticaHabilitada = verdadeiroVeja como usá-lo


O mecanismo específico de recuperação é o seguinte

1. Quando o AutoRecoveringConnection for inicializado, adicione o gerenciamento de desconexão ao delegado de eventos de encerramento do link


Observe a chamada BeginAutomaticRecovery e você verá que o método PerformAutomaticRecovery é chamado internamente. Vamos olhar diretamente para o conteúdo desse método, sendo o primeiro o método RecoverConnectionDelegate



A chamada nesse método é:

Como você pode ver, ele executa um loop morto até a conexão reabrir e, claro, se encontrar uma exceção, chama o Thread.Sleep para esperar um pouco e então realiza a recuperação da conexão novamente.




Anterior:Introdução aos três modos de troca (fanout, direct e topic) do RabbitMQ
Próximo:Te ensinar a configurar seu próprio servidor DNS!
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com