2017-08-01 6 views
0

Ich habe 2 Windows-Dienste in C#. Dienst 1 veröffentlicht Nachrichten in der RabbitMQ-Warteschlange. Dienst 2 abonniert die RabbitMQ-Warteschlange. Service 2 verbindet sich auch mit einem TCP-Server und sendet die von RabbitMQ empfangenen Nachrichten an diesen Server. Meine Frage ist, gibt es eine Möglichkeit, Service 1 davon abzuhalten, Nachrichten an die Warteschlange zu veröffentlichen, wenn Service 2, die diese Nachricht verbraucht aufgrund eines Fehlers fehlgeschlagen ist (meistens SocketException, wenn es keine Verbindung zum Server herstellen kann). Jeder Zeiger wäre wirklich hilfreich. Bitte lassen Sie mich wissen, wenn weitere Informationen benötigt werden.RabbitMQ - Wie man einen Publisher-Dienst stoppt, wenn der Abonnenten-Dienst mit einem Fehler fehlschlägt

Vielen Dank im Voraus.

Antwort

0

Nur ein paar meiner (opinionated) Ideen, wie sich ihr nähern:

  1. Eine Möglichkeit wäre, eine Art von Hartbeat-Messaging-System zwischen den beiden zu erstellen und überprüfen, ob der Dienst OK eingeschaltet ist Intervalle, dies hat den Nachteil, dass etwas passiert , nachdem Sie einen Scheck und vor dem nächsten.

  2. Ein anderer wäre Service 1 ein Sperr-Flag hinzuzufügen, es zu haben zu stoppen Senden der Flagge Service 2 und umschalten, indem Sie mit Service 2 eine Nachricht an Leistung 1 auf eine Ausnahme zurückschicken, denn diese wieder, aber auf Intervalle müssen Sie überprüfen, wenn die Anrufe wieder funktionieren und Service 1 in einen ON-Zustand zurückschalten.

  3. Sie exponentiellen Backoff-1 als Service könnte dies den Kopf nicht überschwemmen Service 2, wirklich haben würde und auch vermeiden, die Kontrollen und Pingpong von Nachrichten, ist der Nachteil, dass die Backoff-Zeit wachsen könnte groß.

Prost

Verwandte Themen