Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 24043|Απάντηση: 0

[Φόρμα Win] .net/c# Αποσύνδεση σύνδεσης RabbitMQ - αποσύνδεση και επανασύνδεση

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 29/3/2018 4:30:04 μ.μ. | | | |
Ο επίσημος κωδικός δείγματος καταναλωτή NET που δίνεται από το Rabbitmq είναι ο εξής, αλλά κατά τη διαδικασία χρήσης, θα αντιμετωπίσετε το πρόβλημα της αποσύνδεσης σύνδεσης, μόλις αποσυνδεθεί, αυτός ο κωδικός θα αναφέρει ένα σφάλμα, το οποίο θα αναγκάσει τους καταναλωτές ή τους παραγωγούς να κλείσουν το τηλέφωνο.

Η παρακάτω εικόνα δείχνει τον παραγωγό να στέλνει ένα μήνυμα, σταμάτησα χειροκίνητα το rabbitmq και μετά επανεκκίνησα το rabbitmq, πιθανώς μετά την επιτυχή εκκίνηση, περίμενα άλλα 10 δευτερόλεπτα για να αποτρέψω την πλήρη εκκίνηση της υπηρεσίας

Μετά την πλήρη εκκίνηση της υπηρεσίας, προσπαθώ να στείλω ξανά ορισμένα μηνύματα με σφάλματα ως εξής:

Ασυνήθιστο κείμενο **************
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=
   Στο RabbitMQ.Client.Impl.SessionBase.Transmit(Εντολή cmd)
   στο RabbitMQ.Client.Impl.ModelBase.ModelSend(μέθοδος MethodBase, κεφαλίδα ContentHeaderBase, σώμα Byte[])
   στο RabbitMQ.Client.Impl.ModelBase.BasicPublish(Ανταλλαγή συμβολοσειρών, Κλειδί δρομολόγησης συμβολοσειρών, Boolean υποχρεωτικό, IBasicProperties basicProperties, Byte[] body)
   στο RabbitMQ.Client.Impl.ModelBase.BasicPublish(Ανταλλαγή συμβολοσειρών, Κλειδί δρομολόγησης συμβολοσειρών, IBasicProperties basicProperties, Byte[] body)
   Στο rabbitMQ_Publish.Form1.button1_Click(Object sender, EventArgs e) θέση C:\project\my\RabbitMQ-demo\rabbitMQ-Publish\Form1.cs: αριθμός γραμμής 37
   In System.Windows.Forms.Control.OnClick(EventArgs e)
   In System.Windows.Forms.Button.OnClick(EventArgs e)
   Στο System.Windows.Forms.Button.PerformClick()
   στο System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
   στο System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
   Στο System.Windows.Forms.Control.PreProcessMessage(Message& msg)
   Στο System.Windows.Forms.Control.PreProcessControlMessageInternal(Στόχος ελέγχου, Μήνυμα& μήνυμα)
   Στο System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)





Πώς μπορεί λοιπόν να ανακτηθεί ασυνήθιστα; Ή είναι αποσυνδεδεμένο και επανασυνδεδεμένο;

Ο πηγαίος κώδικας του RabbitMQ NET Client, η έρευνα βρήκε έναAutomaticRecoveryEnabled = αληθέςΔείτε πώς να το χρησιμοποιήσετε


Ο συγκεκριμένος μηχανισμός ανάκτησης έχει ως εξής

1. Όταν προετοιμαστεί το AutoRecoveringConnection, προσθέστε το χειρισμό αποσύνδεσης στον πληρεξούσιο συμβάντος κλεισίματος σύνδεσης


Παρατηρήστε την κλήση BeginAutomaticRecovery και μπορείτε να δείτε ότι η μέθοδος PerformAutomaticRecovery καλείται εσωτερικά. Ας δούμε απευθείας τα περιεχόμενα αυτής της μεθόδου, η πρώτη από τις οποίες είναι η μέθοδος RecoverConnectionDelegate



Η κλήση σε αυτή τη μέθοδο είναι:

Όπως μπορείτε να δείτε, εκτελεί έναν νεκρό βρόχο μέχρι να ανοίξει ξανά η σύνδεση και φυσικά, εάν συναντήσει κάποια εξαίρεση, καλεί το Thread.Sleep να περιμένει λίγο και στη συνέχεια εκτελεί ξανά ανάκτηση σύνδεσης.




Προηγούμενος:Εισαγωγή στους τρεις τρόπους ανταλλαγής (fanout, direct και topic) του RabbitMQ
Επόμενος:Σας διδάσκει πώς να ρυθμίσετε τον δικό σας διακομιστή DNS!
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com