偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

.NET開源的處理分布式事務(wù)的解決方案

開發(fā) 前端
CAP 是一個基于 .NET Standard 的 C# 庫,它是一種處理分布式事務(wù)的解決方案,同樣具有 EventBus 的功能,它具有輕量級、易使用、高性能等特點。CAP 是一個EventBus,同時也是一個在微服務(wù)或者SOA系統(tǒng)中解決分布式事務(wù)問題的一個框架。

前言

在分布式系統(tǒng)中,由于各個系統(tǒng)服務(wù)之間的獨立性和網(wǎng)絡(luò)通信的不確定性,要確保跨系統(tǒng)的事務(wù)操作的最終一致性是一項重大的挑戰(zhàn)。今天給大家推薦一個.NET開源的處理分布式事務(wù)的解決方案基于 .NET Standard 的 C# 庫:CAP。

CAP項目介紹

CAP 是一個基于 .NET Standard 的 C# 庫,它是一種處理分布式事務(wù)的解決方案,同樣具有 EventBus 的功能,它具有輕量級、易使用、高性能等特點。CAP 是一個EventBus,同時也是一個在微服務(wù)或者SOA系統(tǒng)中解決分布式事務(wù)問題的一個框架。它有助于創(chuàng)建可擴展,可靠并且易于更改的微服務(wù)系統(tǒng)。

什么是 EventBus?

事件總線是一種機制,它允許不同的組件彼此通信而不彼此了解。組件可以將事件發(fā)送到Eventbus,而無需知道是誰來接聽或有多少其他人來接聽。組件也可以偵聽Eventbus上的事件,而無需知道誰發(fā)送了事件。這樣,組件可以相互通信而無需相互依賴。同樣,很容易替換一個組件。只要新組件了解正在發(fā)送和接收的事件,其他組件就永遠不會知道。

CAP架構(gòu)預(yù)覽

圖片圖片

CAP支持的存儲

SQL Server、MySQL、PostgreSql、MongoDB、In-Memory Storage。

CAP 支持以下幾種運輸方式

RabbitMQ、Kafka、Azure Service Bus、Amazon SQS、NATS、In-Memory Queue、Redis Streams、Apache Pulsar。

怎么選擇運輸器

圖片圖片

項目源碼

圖片圖片

快速開始

安裝DotNetCore.CAP Nuget包

圖片圖片

CAP 支持主流的消息隊列作為傳輸器:

  • 我本地安裝的是DotNetCore.CAP.RabbitMQ。
//你可以按需選擇下面的包進行安裝:
PM> Install-Package DotNetCore.CAP.Kafka
PM> Install-Package DotNetCore.CAP.RabbitMQ
PM> Install-Package DotNetCore.CAP.AzureServiceBus
PM> Install-Package DotNetCore.CAP.AmazonSQS
PM> Install-Package DotNetCore.CAP.NATS
PM> Install-Package DotNetCore.CAP.RedisStreams
PM> Install-Package DotNetCore.CAP.Pulsar

圖片圖片

CAP 提供了主流數(shù)據(jù)庫作為存儲:

  • 我本地安裝的是DotNetCore.CAP.MongoDB。
// 按需選擇安裝你正在使用的數(shù)據(jù)庫:
PM> Install-Package DotNetCore.CAP.SqlServer
PM> Install-Package DotNetCore.CAP.MySql
PM> Install-Package DotNetCore.CAP.PostgreSql
PM> Install-Package DotNetCore.CAP.MongoDB

圖片圖片

配置CAP到 Program.cs 文件中,如下:

builder.Services.AddCap(x =>
            {
                //如果你使用的 EF 進行數(shù)據(jù)操作,你需要添加如下配置:
                //配置數(shù)據(jù)庫上下文
                x.UseEntityFramework<AppDbContext>();

                //如果你使用的 MongoDB,你可以添加如下配置:
                x.UseMongoDB("ConnectionStrings");  //注意,僅支持MongoDB 4.0+集群

                //CAP RabbitMQ 配置
                x.UseRabbitMQ(rab => {
                    rab.HostName = "192.0.1.1";
                    rab.Password = "123456";
                    rab.Port = 5672;
                    rab.UserName = "123456";
                });
            });

發(fā)布

在 Controller 中注入 ICapPublisher 然后使用 ICapPublisher 進行消息發(fā)送。

public class PublishController : Controller
{
    private readonly ICapPublisher _capBus;

    public PublishController(ICapPublisher capPublisher)
    {
        _capBus = capPublisher;
    }
    
    //不使用事務(wù)
    [Route("~/without/transaction")]
    public IActionResult WithoutTransaction()
    {
        _capBus.Publish("xxx.services.show.time", DateTime.Now);

        // Publish delay message
        _capBus.PublishDelayAsync(TimeSpan.FromSeconds(delaySeconds), "xxx.services.show.time", DateTime.Now);
 
        return Ok();
    }

    //Ado.Net 中使用事務(wù),自動提交
    [Route("~/adonet/transaction")]
    public IActionResult AdonetWithTransaction()
    {
        using (var connection = new MySqlConnection(ConnectionString))
        {
            using (var transaction = connection.BeginTransaction(_capBus, autoCommit: true))
            {
                //業(yè)務(wù)代碼

                _capBus.Publish("xxx.services.show.time", DateTime.Now);
            }
        }
        return Ok();
    }

    //EntityFramework 中使用事務(wù),自動提交
    [Route("~/ef/transaction")]
    public IActionResult EntityFrameworkWithTransaction([FromServices]AppDbContext dbContext)
    {
        using (var trans = dbContext.Database.BeginTransaction(_capBus, autoCommit: true))
        {
            //業(yè)務(wù)代碼

            _capBus.Publish("xxx.services.show.time", DateTime.Now);
        }
        return Ok();
    }
}

訂閱

Action Method

在 Action 上添加 CapSubscribeAttribute 來訂閱相關(guān)消息。

public class PublishController : Controller
{
    [CapSubscribe("xxx.services.show.time")]
    public void CheckReceivedMessage(DateTime datetime)
    {
        Console.WriteLine(datetime);
    }
}

Service Method

如果你的訂閱方法沒有位于 Controller 中,則你訂閱的類需要繼承 ICapSubscribe:

namespace xxx.Service
{
    public interface ISubscriberService
    {
        void CheckReceivedMessage(DateTime datetime);
    }

    public class SubscriberService: ISubscriberService, ICapSubscribe
    {
        [CapSubscribe("xxx.services.show.time")]
        public void CheckReceivedMessage(DateTime datetime)
        {
        }
    }
}

項目源碼地址

更多項目實用功能和特性歡迎前往項目開源地址查看??,別忘了給項目一個Star支持??。

GitHub開源地址:https://github.com/dotnetcore/CAP

官方文檔:https://cap.dotnetcore.xyz/

優(yōu)秀項目和框架精選

該項目已收錄到C#/.NET/.NET Core優(yōu)秀項目和框架精選中,關(guān)注優(yōu)秀項目和框架精選能讓你及時了解C#、.NET和.NET Core領(lǐng)域的最新動態(tài)和最佳實踐,提高開發(fā)工作效率和質(zhì)量。坑已挖,歡迎大家踴躍提交PR推薦或自薦(讓優(yōu)秀的項目和框架不被埋沒??)。

https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md


責(zé)任編輯:武曉燕 來源: 追逐時光者
相關(guān)推薦

2025-04-29 04:00:00

分布式事務(wù)事務(wù)消息

2019-01-11 18:22:07

阿里巴巴技術(shù)開源

2025-04-28 00:44:04

2023-09-14 15:44:46

分布式事務(wù)數(shù)據(jù)存儲

2020-05-28 09:35:05

分布式事務(wù)方案

2010-07-21 13:53:41

SQL Server分

2025-05-07 00:10:00

分布式事務(wù)TCC模式

2021-09-28 09:43:11

微服務(wù)架構(gòu)技術(shù)

2024-06-13 08:04:23

2025-06-30 07:15:32

.NET應(yīng)用分布式

2024-03-26 12:08:53

分布式事務(wù)存儲

2021-06-28 10:03:44

分布式數(shù)據(jù)庫架構(gòu)

2020-03-31 16:13:26

分布式事務(wù)方案TCC

2019-07-25 15:32:35

分布式事務(wù)微服務(wù)系統(tǒng)架構(gòu)

2024-12-09 09:35:00

2023-08-17 10:23:07

擴展方案

2020-09-23 09:52:01

分布式WebSocketMQ

2019-09-09 10:09:51

分布式事務(wù) 數(shù)據(jù)庫

2023-03-05 18:23:38

分布式ID節(jié)點

2010-06-30 17:27:32

SQL Server數(shù)
點贊
收藏

51CTO技術(shù)棧公眾號