
Kürzlich haben sie erfolgreich ein Benutzerverarbeitungssystem für Bürger in Betrieb genommen. Das Fazit ist, dass Sie sich über ein Problem in Regierungsbehörden beschweren können, wenn Sie kein Wasser, keine Heizung oder kein großes Loch in der Straße in der Nähe Ihres Hauses haben. Es gibt verschiedene Plattformen, auf denen Sie eine Beschwerde einreichen können: Websites von Regierungsbehörden, Seiten in sozialen Netzwerken, Call Center.
Unsere Aufgabe war es, eine einzige Pipeline für die Bearbeitung von Anträgen für alle Abteilungen zu erstellen.
Das Hauptziel des Systems ist es, den Prozess der Anrufverarbeitung so weit wie möglich zu beschleunigen: alles automatisieren, das Timing in jeder Phase des Prozesses steuern, die Bewohner über jeden Schritt informieren.
Eine der spezifischen Aufgaben des Projekts war die Integration in eine Vielzahl externer Systeme.
- Es war notwendig, von verschiedenen Standorten zu lernen, den gesamten Beschwerdefluss zu erfassen, mit ihnen über alle Änderungen bei Anträgen zu kommunizieren und Korrespondenz zwischen Beamten und Bürgern zu führen, um die Einzelheiten der Beschwerden zu klären.
- Darüber hinaus haben wir einige Funktionen an Dienste von Drittanbietern vergeben.
Weil Viele Daten gingen ein, mussten oft im asynchronen Modus arbeiten, dann musste das Projektteam das Problem lösen, um sich selbst und Systeme von Drittanbietern nicht zu erwürgen. Die Lösung wurde im Software Message Broker Rabbit MQ gefunden. Zu dieser Zeit war es eine neue Technologie für das Team.
Im Folgenden finden Sie ein Interview mit dem Entwickler des Projekt-Backends, Alexander Shcheglov,
WilyLynx , der sich mit dem Problem befasste und die Integration implementierte.
- Sasha, hallo! Bitte sagen Sie uns auf den Punkt gebracht, was Rabbit MQ ist.Die Software ist hauptsächlich für die Implementierung von verzögertem Messaging zwischen verschiedenen Clients vorgesehen, d. H. wenn Sie gerade keine Antwort benötigen.
- Ich verstehe richtig, dass es im Allgemeinen so funktioniert: Der sendende Dienst in der erstellten Warteschlange stellt die Daten so, wie sie generiert werden, der empfangende Dienst nimmt diese Informationen nach Bedarf?Genau das funktioniert.
- Warum haben Sie (Entwicklungsteam) diese Lösung für das Projekt ausgewählt?Aus mehreren Gründen. Erstens ist in unserem Fall die synchrone Verarbeitung (gleichzeitig empfangen und verarbeitet) nicht kritisch, d.h. Eine Nachricht kann eine Weile in der Warteschlange hängen bleiben. Benutzerfreundlichkeit: Um Nachrichten zu empfangen, müssen Sie nur den Namen der Warteschlange deklarieren, und Sie müssen Ihre Dienste nicht schreiben. Nun, die Verfügbarkeit von Bibliotheken für gemeinsame YP. Sie müssen nichts erfinden, um mit RabbitMQ zu arbeiten.
- Ich verstehe richtig, dass Sie mit Rabbit MQ den Datenaustausch zwischen Systemen und Webdiensten steuern können.Vielmehr verwalten wir den Austausch immer noch, aber das „Kaninchen“ ist ein hervorragendes Instrument, um diesen Austausch zu organisieren. Hier haben Sie die Lebensdauer der Nachrichten in den Warteschlangen und die maximale Länge der Warteschlange sowie Zugriffseinstellungen und Clustering sowie verschiedene Austauschprotokolle und ein Plug-In-System und mehr.
- Wie wird festgestellt, dass die Nachricht zugestellt wurde? - das heißt, wie wird festgestellt, dass der Kunde nach Erhalt etwas verlängert hat oder dabei hängen geblieben ist?Es gilt als geliefert, wenn innerhalb eines bestimmten Zeitraums eine Antwort des Kunden eintrifft. Es heißt in der Tat, dass er das Leben erhalten hat und mit ihm zufrieden war. Der Client kann eine Antwort senden, sobald sie empfangen wurde, und dann versuchen, die Nachricht zu verarbeiten. Vielleicht versuchen Sie im Gegenteil zuerst, eine Antwort zu verarbeiten und bei Erfolg zu senden. Oder Sie können dem Kaninchen im Voraus mitteilen, dass es nicht auf die Bestätigung der Lieferung von Ihnen wartet und nur Nachrichten erhält. Alle gesendeten Artikel gelten automatisch als geliefert.
- Ist es beispielsweise möglich, nicht alle Nachrichten zu empfangen, sondern beispielsweise nur Nachrichten in einer bestimmten Anwendung zu abonnieren?Es gibt eine etwas andere Situation. Es besteht die Möglichkeit, Nachrichten zu senden, in denen Nachrichten an alle Kunden eingehen. Diese Option wird als "Veröffentlichen / Abonnieren" bezeichnet. Ein gutes Beispiel: eine neue Nachricht in Ihrer Öffentlichkeit. Sie haben gesendet, alle Unterzeichner erhalten. Und schon nach Erhalt dachten sie zu lesen oder nicht zu lesen. Im Allgemeinen stört Sie niemand, eine separate Warteschlange für sich selbst zu erstellen und nur damit zu arbeiten. In diesem Fall befindet sich das Routing bereits auf Anwendungsebene und das Kaninchen als Kommunikationskanal.
- Sasha, sag mir, gibt es eine Option, nicht Tausende von Warteschlangen zu erstellen, sondern für eine zu filtern und zu routen?Von einem wird es nicht funktionieren, aber Rabbit wird ein Routing zulassen.
- Bitte erzählen Sie uns mehr.Eines davon ist es nicht, aber es gibt Konzepte wie "Austausch" und "Routing-Schlüssel":
P - Produzent, der Absender der Nachricht im Austausch
X - sich austauschen
Rote Streifen - Linien
C1 und C2 - Empfänger

Pabbit kann eine Nachricht im Austausch mit einem bestimmten Schlüssel senden (z. B. Fehler / Info / Warnung). Und wie Sie sehen, sind verschiedene Empfänger darauf ausgerichtet, Nachrichten mit unterschiedlichen Routing-Schlüsseln zu empfangen. Darüber hinaus erhält nur C2 eine Nachricht mit der Taste "info", und beide erhalten eine Nachricht mit der Taste "error". Es ist auch möglich, Nachrichten gemäß der Vorlage für den Schlüssel zu empfangen. Dies gilt für eine andere Art von "Veröffentlichen / Abonnieren" -Austausch, die ich bereits erwähnt habe.

Wie Sie auf jeden Fall sehen können, gibt es für jeden Empfänger in diesen Arten von Austauschen eine Wendung, aber am Ende haben wir immer noch einen Anschein von Filterung / Routing.
- Woran können Sie sich erinnern, welche Probleme während des Studiums und der Implementierung von Rabbit aufgetreten sind?Abgesehen von Faulheit, nein. Ernsthaft, klare Dokumentation, eine Vielzahl von Beispielen.
- Haben Sie bereits alle Austausche mit Diensten und externen Systemen darauf übertragen?Wir haben jetzt 38 Warteschlangen: Austausch zwischen Schaltkreisen, externen Systemen, BI. Leider widersetzen sich einige Dienste (Leseabteilungen). weil Sie haben Ruhe implementiert. Darüber hinaus umfassen einige Arten von Interaktionen den gleichzeitigen Empfang von Antworten auf Anforderungen.
- Was denkst du, wie erfolgreich war diese Entscheidung?Für die Zusammenarbeit zwischen Agenturen, für die keine synchrone Antwort erforderlich ist? Für mich ist es eine großartige Option.
Liste der verwendeten Materialien