Rumah > Artikel > pembangunan bahagian belakang > Cara menangani transaksi yang diedarkan dan baris gilir mesej dalam pembangunan C#
Cara menangani transaksi yang diedarkan dan baris gilir mesej dalam pembangunan C#
Pengenalan:
Dalam sistem edaran hari ini, transaksi dan baris gilir mesej adalah komponen yang sangat penting. Transaksi teragih dan baris gilir mesej memainkan peranan penting dalam mengendalikan ketekalan data dan penyahgandingan sistem. Artikel ini akan memperkenalkan cara mengendalikan transaksi yang diedarkan dan baris gilir mesej dalam pembangunan C#, dan memberikan contoh kod khusus.
1. Urus niaga teragih
Urus niaga teragih merujuk kepada transaksi yang merangkumi pelbagai pangkalan data atau perkhidmatan. Dalam sistem teragih, cara memastikan ketekalan data telah menjadi cabaran utama. Dua kaedah yang biasa digunakan untuk memproses transaksi teragih diperkenalkan di bawah:
public void TwoPhaseCommit() { using (var scope = new TransactionScope()) { try { // 执行分布式事务操作1 DoSomethingWithDatabase1(); // 执行分布式事务操作2 DoSomethingWithDatabase2(); // 事务提交 scope.Complete(); } catch (Exception ex) { // 事务回滚 scope.Dispose(); } } }
public void SagaDemo() { try { // 执行分布式事务操作1 DoSomethingStep1(); // 执行分布式事务操作2 DoSomethingStep2(); // 执行分布式事务操作N DoSomethingStepN(); // 事务提交 Commit(); } catch (Exception ex) { // 发生异常,执行事务的回滚逻辑 Rollback(); } }
2. Baris Gilir Mesej
Baris gilir mesej ialah cara menghantar mesej dalam sistem teragih Ia mempunyai kelebihan penyahgandingan, ketidaksegerakan, dan pencukuran puncak dan pengisian lembah. . Berikut ialah cara menggunakan RabbitMQ sebagai baris gilir mesej:
Buat pengeluar mesej
using RabbitMQ.Client; public class MessageProducer { public void SendMessage() { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "message_queue", durable: false, exclusive: false, autoDelete: false, arguments: null); string message = "Hello, World!"; var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "", routingKey: "message_queue", basicProperties: null, body: body); Console.WriteLine("Sent message: {0}", message); } } }
Buat pengguna mesej
using RabbitMQ.Client; using RabbitMQ.Client.Events; public class MessageConsumer { public void ConsumeMessage() { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "message_queue", durable: false, exclusive: false, autoDelete: false, arguments: null); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); Console.WriteLine("Received message: {0}", message); }; channel.BasicConsume(queue: "message_queue", autoAck: true, consumer: consumer); Console.WriteLine("Waiting for messages..."); Console.ReadLine(); } } }
Ringkasan:
Artikel ini memperkenalkan cara mengendalikan transaksi yang diedarkan dan baris gilir mesej dalam contoh pembangunan C#, dan memberikan contoh pembangunan kod C#. Kaedah pemprosesan transaksi yang diedarkan termasuk mod Komit Dua fasa dan Saga, dan penggunaan baris gilir mesej boleh dilaksanakan melalui RabbitMQ. Dalam pembangunan sebenar, memilih kaedah pemprosesan yang sesuai dan baris gilir mesej berdasarkan senario dan keperluan perniagaan tertentu boleh meningkatkan kestabilan dan kebolehskalaan sistem.
Atas ialah kandungan terperinci Cara menangani transaksi yang diedarkan dan baris gilir mesej dalam pembangunan C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!