Cara menangani transaksi yang diedarkan dan baris gilir mesej dalam pembangunan C#

王林
Lepaskan: 2023-10-09 11:36:18
asal
989 orang telah melayarinya

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:

  1. Komit Dua Fasa (Komit Dua Fasa)
    Komit Dua Fasa (2PC) ialah protokol yang memastikan konsistensi transaksi dalam sistem yang diedarkan. Idea asasnya ialah penyelaras (Penyelaras) membahagikan urus niaga global kepada fasa Sediakan dan fasa Komit, dan akhirnya memutuskan sama ada untuk melakukan atau menarik balik transaksi melalui interaksi dengan setiap peserta (Peserta). Berikut ialah contoh kod mudah:
public void TwoPhaseCommit()
{
    using (var scope = new TransactionScope())
    {
        try
        {
            // 执行分布式事务操作1
            DoSomethingWithDatabase1();

            // 执行分布式事务操作2
            DoSomethingWithDatabase2();

            // 事务提交
            scope.Complete();
        }
        catch (Exception ex)
        {
            // 事务回滚
            scope.Dispose();
        }
    }
}
Salin selepas log masuk
  1. Saga Pattern
    Saga Pattern ialah penyelesaian untuk mengendalikan urus niaga yang diedarkan dengan membahagikan urus niaga besar kepada berbilang transaksi kecil, masing-masing dengan logik Rollback bebas dan operasi pampasan untuk memastikan ketekalan akhirnya. Berikut ialah contoh kod mudah mod Saga:
public void SagaDemo()
{
    try
    {
        // 执行分布式事务操作1
        DoSomethingStep1();

        // 执行分布式事务操作2
        DoSomethingStep2();

        // 执行分布式事务操作N
        DoSomethingStepN();

        // 事务提交
        Commit();
    }
    catch (Exception ex)
    {
        // 发生异常,执行事务的回滚逻辑
        Rollback();
    }
}
Salin selepas log masuk

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:

  1. Pasang RabbitMQ
    Mula-mula, anda perlu memasang RabbitMQ. Anda boleh memuat turun dan memasang RabbitMQ dengan melawati laman web rasmi RabbitMQ (https://www.rabbitmq.com/).
  2. 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);
         }
     }
    }
    Salin selepas log masuk
  3. 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();
         }
     }
    }
    Salin selepas log masuk

    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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!