Memantau pesan dalam RabbitMQ

Pertimbangkan skema desain pipa pesan RabbitMQ klasik yang terdiri dari elemen-elemen Produser, Exchange, Antrian, dan Konsumen.



Tugasnya adalah mengatur pemantauan apa yang terjadi dalam antrian dan tidak memengaruhi perangkat lunak utama (perangkat lunak), menambah kemampuan fleksibel untuk membuat laporan dan pada saat yang sama menghindari biaya tambahan. Desain akhir harus memungkinkan Anda membuat laporan dengan cepat untuk menganalisis aliran data pada pipa tanpa menggunakan kapasitas server utama (yang akan menghindari beban tambahan) dan perangkat lunak utama. Pendekatannya harus mudah dibawa ke arsitektur yang lebih kompleks.

Pertama-tama, kami akan menyelenggarakan demonstrasi, untuk ini kami akan membuat perubahan berikut untuk pengoperasian conveyor:



Awalnya, konfigurasi berikut ini ditetapkan untuk Exchange (faust), yang tidak berubah pada contoh yang dipertimbangkan selama modifikasi:



Pengaturan penting adalah jenis fanaut - yang memungkinkan Anda membuat dua antrian peer-to-peer dan menduplikasi seluruh aliran pesan ke dalam antrian Statistik baru:





tanpa gangguan dengan proses utama dalam antrian Log. Mari kita mulai memproses aliran pesan. Pertama-tama, kami membuat tabel di server MS SQL untuk menyimpan informasi statistik. Anda dapat menggunakan pendekatan lain, misalnya, menyimpan pesan ke file dalam format xml atau cara lain, dalam contoh ini, server SQL dipilih untuk menghindari pemrograman tambahan

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

Seperti yang Anda lihat dari kueri SQL, ini adalah tabel dengan nomor catatan, beberapa teks dan tanggal catatan dimasukkan ke dalam tabel.

Mari kita buat klien yang akan menghubungi RabbitMQ dalam antrian Statistik, mengumpulkan data yang diterima dan mentransfernya ke tabel 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!"); } } } 

Mari kita lihat cara kerjanya secara real time.


Sementara itu, di MS SQL Server



Buat laporan berdasarkan antrian Statistik


Inilah yang terjadi:



Kesimpulan


Contoh yang dipertimbangkan menunjukkan cara mengumpulkan statistik dengan cepat dan bahkan membuat laporan yang dapat disimpan ke PDF dan dikirim melalui pos sesuai dengan pipa RabbitMQ dan antrian tambahan. Sangat mudah untuk memberikan contoh tugas ketika informasi dikumpulkan tentang proses dan laporan yang dibuat tanpa mengembangkan sisi server. Mengingat FastReports menawarkan versi open-source, dimungkinkan untuk secara signifikan mengurangi biaya pengembangan tanpa biaya tambahan. Konveyor itu sendiri juga mudah dikonfigurasi ulang dan dapat disesuaikan untuk tugas yang lebih kompleks.

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


All Articles