Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 24043|Répondre: 0

[WinForm] .net/c# Déconnexion de connexion RabbitMQ - déconnexion et reconnexion

[Copié le lien]
Publié sur 29/03/2018 16:30:04 | | | |
Le code d’exemple officiel NET pour les consommateurs fourni par Rabbitmq est le suivant, mais lors du processus d’utilisation, vous rencontrerez le problème de la déconnexion ; une fois déconnecté, ce code signalera une erreur, ce qui fera raccrocher les consommateurs ou les producteurs.

La photo suivante montre le producteur envoyant un message, j’ai arrêté rabbitmq manuellement, puis redémarré rabbitmq, probablement après le démarrage réussi, j’ai attendu encore 10 secondes pour empêcher le service de démarrer complètement

Une fois le service complètement lancé, j’essaie de renvoyer quelques messages avec des erreurs comme suit :

Texte inhabituel **************
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=
   Dans RabbitMQ.Client.Impl.SessionBase.Transmit(Command cmd)
   at RabbitMQ.Client.Impl.ModelBase.ModelSend(méthode MethodBase, en-tête ContentHeaderBase, corps Byte[])
   sur RabbitMQ.Client.Impl.ModelBase.BasicPublish(Échange de chaînes, Clé de routage de chaînes, obligatoire booléen, IBasicProperties basicProperties, corps de byte[]
   sur RabbitMQ.Client.Impl.ModelBase.BasicPublish(Échange de chaînes, Clé de routage de chaînes, IBasicProperties PropertiesBasicProperties, corps Byte[])
   À rabbitMQ_Publish.Form1.button1_Click(Object sender, EventArgs e) position C :\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs : ligne numéro 37
   Dans System.Windows.Forms.Control.OnClick(EventArgs e)
   Dans System.Windows.Forms.Button.OnClick(EventArgs e)
   Dans System.Windows.Forms.Button.PerformClick()
   sur System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   sur System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   Dans System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   Dans System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)
   Sur System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)





Alors, comment peut-on se remettre de façon anormale ? Ou est-ce que c’est déconnecté puis reconnecté ?

Le code source du client RabbitMQ NET, la recherche a trouvé unAutomaticRecoveryEnabled = vraiVoici comment l’utiliser


Le mécanisme spécifique de récupération est le suivant

1. Lorsque AutoRecoveringConnection est initialisé, ajoutez la gestion de la déconnexion au délégué d’événement de fermeture de lien


Observez l’appel BeginAutomaticRecovery, et vous verrez que la méthode PerformAutomaticRecovery est appelée en interne. Examinons directement le contenu de cette méthode, la première étant la méthode RecoverConnectionDelegate



L’appel dans cette méthode est :

Comme vous pouvez le voir, il exécute une boucle morte jusqu’à ce que la connexion se rouvre, et bien sûr, s’il rencontre une exception, il appelle Thread.Sleep pour attendre un moment puis effectue à nouveau la récupération de la connexion.




Précédent:Introduction aux trois modes d’échange (fanout, direct et topic) de RabbitMQ
Prochain:Apprendre à configurer votre propre serveur DNS !
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com