Nachrichten in RabbitMQ überwachen

Betrachten Sie das klassische Entwurfsschema für die RabbitMQ-Nachrichtenpipeline, das aus den Elementen Producer, Exchange, Queue und Consumer besteht.



Die Aufgabe besteht darin, die Überwachung des Geschehens in der Warteschlange zu organisieren und die Hauptsoftware (Software) nicht zu beeinträchtigen, die flexible Möglichkeit zum Erstellen von Berichten hinzuzufügen und gleichzeitig zusätzliche Kosten zu vermeiden. Das endgültige Design sollte es Ihnen ermöglichen, schnell Berichte zu erstellen, um den Datenfluss in der Pipeline zu analysieren, ohne die Hauptserverkapazitäten (wodurch zusätzliche Belastung vermieden wird) und die Hauptsoftware zu verwenden. Der Ansatz sollte leicht auf eine komplexere Architektur portierbar sein.

Zunächst organisieren wir einen Demonstrationsstand, für den wir folgende Änderungen am Betrieb des Förderers vornehmen:



Anfänglich wurde die folgende Konfiguration für Exchange (faust) festgelegt, die sich im betrachteten Beispiel während der Änderung nicht ändert:



Eine wichtige Einstellung ist der Typ fanaut, mit dem Sie zwei Peer-to-Peer-Warteschlangen erstellen und den gesamten Nachrichtenfluss in die neue Statistikwarteschlange duplizieren können:





ohne den Hauptprozess in der Protokollwarteschlange zu stören. Beginnen wir mit der Verarbeitung des Nachrichtenflusses. Zunächst erstellen wir eine Tabelle auf dem MS SQL Server, um statistische Informationen zu speichern. Sie können einen anderen Ansatz verwenden, z. B. Nachrichten in einer Datei im XML-Format oder auf andere Weise speichern. In diesem Beispiel wird der SQL Server ausgewählt, um zusätzliche Programmierung zu vermeiden

create table RabbitMsg( id int PRIMARY KEY IDENTITY(1000,1), [Message] nvarchar(1000) DEFAULT '', RegDate datetime default GETDATE()) 

Wie Sie der SQL-Abfrage entnehmen können, handelt es sich um eine Tabelle mit einer Datensatznummer, Text und dem Datum, an dem der Datensatz in die Tabelle eingefügt wurde.

Erstellen wir einen Client, der RabbitMQ in der Statistikwarteschlange kontaktiert, die empfangenen Daten sammelt und in die RabbitMsg-Tabelle überträgt

 using System; using RabbitMQ.Client; using RabbitMQ.Client.Events; using System.Text; using System.Data.SqlClient; namespace Getter { class Program { static void Main(string[] args) { var factory = new ConnectionFactory() { HostName = "192.168.1.241", Port = 30672, UserName = "robotics01", Password = "" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange: "faust", type: "fanout", durable: true); var queueName = "Statistics"; channel.QueueBind(queue: queueName, exchange: "faust", routingKey: ""); Console.WriteLine(" [*] Waiting for logs."); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body; var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] {0}", message); SqlConnection sqlconnection = new SqlConnection("Server=tcp:fastreportsql,1433;Initial Catalog=FastReportSQL;Persist Security Info=False;User ID=ufocombat;Password=;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"); sqlconnection.Open(); SqlCommand cmd = new SqlCommand($"INSERT INTO RabbitMsg(Message) VALUES (@msg)", sqlconnection); cmd.Parameters.AddWithValue("msg", message); cmd.ExecuteNonQuery(); sqlconnection.Close(); }; channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); } Console.WriteLine("Hello World!"); } } } 

Mal sehen, wie es in Echtzeit funktioniert.


Inzwischen auf MS SQL Server



Erstellen Sie einen Bericht basierend auf der Statistikwarteschlange


Folgendes ist passiert:



Fazit


Das betrachtete Beispiel zeigt, wie schnell Statistiken erfasst und sogar ein Bericht erstellt werden kann, der als PDF gespeichert und gemäß der RabbitMQ-Pipeline und einer zusätzlichen Warteschlange per E-Mail gesendet werden kann. Es ist einfach, Beispiele für Aufgaben zu finden, wenn Informationen über Prozesse gesammelt und Berichte erstellt werden, ohne die Serverseite zu entwickeln. Da FastReports eine Open-Source-Version anbietet, ist es möglich, die Entwicklungskosten ohne zusätzliche Kosten erheblich zu senken. Der Förderer selbst ist ebenfalls leicht umkonfigurierbar und kann für komplexere Aufgaben angepasst werden.

Source: https://habr.com/ru/post/de447412/


All Articles