RabbitMQでメッセージを監視する

Producer、Exchange、Queue、およびConsumerの各要素で構成されるRabbitMQメッセージパイプライン構築の古典的なスキームを検討してください。







タスクは、メインソフトウェア(ソフトウェア)に影響を与えずにキューで発生していることの監視を整理し、レポートを作成すると同時に追加コストを回避する柔軟な機能を追加することです。 最終設計では、メインサーバーの容量(追加の負荷を回避する)とメインソフトウェアを使用せずに、パイプライン上のデータフローを分析するレポートをすばやく作成できます。 このアプローチは、より複雑なアーキテクチャに簡単に移植できるものでなければなりません。



まず、デモンストレーションスタンドを編成します。このため、コンベアの動作に次の変更を加えます。







最初に、以下の構成がExchange(ファウスト)に設定されましたが、変更中に考慮される例では変更されません。







重要な設定はfanautタイプです。これにより、2つのピアツーピアキューを作成し、メッセージフロー全体を新しい統計キューに複製できます。











ログキューのメインプロセスとの干渉なし。 メッセージフローの処理を始めましょう。 まず、MS SQLサーバー上に統計情報を保存するテーブルを作成します。 他のアプローチを使用できます。たとえば、xml形式またはその他の方法でメッセージをファイルに保存します。この例では、追加のプログラミングを避けるためにSQLサーバーが選択されています



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





SQLクエリからわかるように、これはレコード番号、テキスト、およびレコードがテーブルに挿入された日付を含むテーブルです。



統計キューでRabbitMQに接続し、受信したデータを収集してRabbitMsgテーブルに転送するクライアントを作成しましょう



 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!"); } } }
      
      





リアルタイムでどのように機能するかを見てみましょう。





一方、MS SQL Server







統計キューに関するレポートを作成する





起こったことは次のとおりです。







おわりに



考慮される例は、統計を迅速に収集し、RabbitMQパイプラインと追加のキューに従ってメールで送信してPDFに送信できるレポートを作成する方法を示しています。 プロセスに関する情報を収集し、サーバー側を開発せずにレポートを作成すると、タスクの例を簡単に思い付くことができます。 FastReportsはオープンソースバージョンを提供しているため、追加費用なしで開発コストを大幅に削減できます。 コンベア自体も簡単に再構成可能で、より複雑なタスクに適応できます。



All Articles