Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 24043|Respuesta: 0

[WinForm] Desconexión de conexión .net/c# RabbitMQ - desconexión y reconexión

[Copiar enlace]
Publicado en 29/3/2018 16:30:04 | | | |
El código de ejemplo oficial de NET para consumidores proporcionado por Rabbitmq es el siguiente, pero durante el proceso de uso encontrarás el problema de desconexión de conexión; una vez desconectado, este código informará de un error que hará que los consumidores o productores cuelguen.

La siguiente imagen muestra al productor enviando un mensaje, detuve rabbitmq manualmente y luego reinicié rabbitmq, probablemente después de que el inicio funcionara, esperé otros 10 segundos para evitar que el servicio comenzara completamente

Después de que el servicio está completamente iniciado, intento reenviar algunos mensajes con los siguientes errores:

Texto inusual **************
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=
   En RabbitMQ.Client.Impl.SessionBase.Transmit(Command cmd)
   en RabbitMQ.Client.Impl.ModelBase.ModelSend(método MethodBase, cabecera ContentHeaderBase, cuerpo de byte[])
   en RabbitMQ.Client.Impl.ModelBase.BasicPublish(Intercambio de cadenas, Clave de enrutamiento de cadenas, obligatorio booleano, IBasicProperties basicProperties, cuerpo de byte[])
   en RabbitMQ.Client.Impl.ModelBase.BasicPublish(Intercambio de cadenas, Clave de enrutamiento de cadenas, IBasicProperties básicos, cuerpo de byte[])
   En rabbitMQ_Publish.Form1.button1_Click(Object sender, EventArgs e) posición C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: línea número 37
   En System.Windows.Forms.Control.OnClick(EventArgs e)
   En System.Windows.Forms.Button.OnClick(EventArgs e)
   En System.Windows.Forms.Button.PerformClick()
   at System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   en System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   En System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   En System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)
   En System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)





¿Cómo puede recuperarse de forma anormal? ¿O está desconectado y reconectado?

El código fuente del cliente RabbitMQ NET, según la investigación, encontró unoRecuperaciónAutomáticaHabilitada = verdaderoAsí es como usarlo


El mecanismo específico de recuperación es el siguiente

1. Cuando se inicialice AutoRecoveringConnection, añade la gestión de desconexión al delegado de eventos de cierre de enlace


Observa la llamada BeginAutomaticRecovery y verás que el método PerformAutomaticRecovery se llama internamente. Veamos directamente el contenido de este método, el primero de los cuales es el método RecoverConnectionDelegate



La llamada en este método es:

Como puedes ver, ejecuta un bucle muerto hasta que la conexión se reabre y, por supuesto, si encuentra una excepción, llama a Thread.Sleep para esperar un rato y luego vuelve a hacer la recuperación de conexión.




Anterior:Introducción a los tres modos de intercambio (fanout, directo y tema) de RabbitMQ
Próximo:¡Te enseño a configurar tu propio servidor DNS!
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com