成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

前言

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

CAP項目介紹

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

什么是 EventBus?

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

CAP架構(gòu)預覽

圖片圖片

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;
    }
    
    //不使用事務
    [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 中使用事務,自動提交
    [Route("~/adonet/transaction")]
    public IActionResult AdonetWithTransaction()
    {
        using (var connection = new MySqlConnection(ConnectionString))
        {
            using (var transaction = connection.BeginTransaction(_capBus, autoCommit: true))
            {
                //業(yè)務代碼

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

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

            _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


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

2025-04-29 04:00:00

分布式事務事務消息

2019-01-11 18:22:07

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

2025-04-28 00:44:04

2023-09-14 15:44:46

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

2020-05-28 09:35:05

分布式事務方案

2010-07-21 13:53:41

SQL Server分

2025-05-07 00:10:00

分布式事務TCC模式

2021-09-28 09:43:11

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

2024-06-13 08:04:23

2025-06-30 07:15:32

.NET應用分布式

2024-03-26 12:08:53

分布式事務存儲

2021-06-28 10:03:44

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

2020-03-31 16:13:26

分布式事務方案TCC

2019-07-25 15:32:35

分布式事務微服務系統(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

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

2023-03-05 18:23:38

分布式ID節(jié)點

2010-06-30 17:27:32

SQL Server數(shù)
點贊
收藏

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

主站蜘蛛池模板: 91精品久久久久久久久久入口 | 国产高清视频一区 | 爱综合| 亚洲成人精品 | 日本三级线观看 视频 | 成年女人免费v片 | 亚洲精品久久久久久一区二区 | 欧美日韩精品一区二区 | 久久精品亚洲一区 | 亚洲一区二区三区在线视频 | 啪啪免费网站 | 国产日韩一区二区三区 | 日韩精品久久久久 | 欧美福利| 日韩精品久久久久 | 91九色视频 | 麻豆精品国产91久久久久久 | 亚洲成人精品视频 | 欧美区日韩区 | 色呦呦网站 | 夜夜干夜夜操 | 夜夜草导航 | 91精品国产92 | 在线观看中文字幕av | 国产ts人妖另类 | 婷婷激情在线 | 亚洲区中文字幕 | 成人精品在线观看 | 99精品视频一区二区三区 | 亚洲电影第三页 | 成人久久18免费网站图片 | 欧美日韩亚洲一区 | 日本色综合 | 国产三级大片 | 婷婷久久综合 | 欧美性精品 | 国产精品大全 | 免费在线播放黄色 | 精品欧美乱码久久久久久 | 国产精品国产三级国产aⅴ原创 | 久久国 |