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

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

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

前言

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

CAP項目介紹

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

什么是 EventBus?

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

CAP架構預覽

圖片圖片

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 提供了主流數據庫作為存儲:

  • 我本地安裝的是DotNetCore.CAP.MongoDB。
// 按需選擇安裝你正在使用的數據庫:
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 進行數據操作,你需要添加如下配置:
                //配置數據庫上下文
                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";
                });
            });

發布

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

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))
            {
                //業務代碼

                _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))
        {
            //業務代碼

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

訂閱

Action Method

在 Action 上添加 CapSubscribeAttribute 來訂閱相關消息。

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/

優秀項目和框架精選

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

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


責任編輯:武曉燕 來源: 追逐時光者
相關推薦

2025-04-29 04:00:00

分布式事務事務消息

2019-01-11 18:22:07

阿里巴巴技術開源

2025-04-28 00:44:04

2023-09-14 15:44:46

分布式事務數據存儲

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

微服務架構技術

2024-06-13 08:04:23

2024-03-26 12:08:53

分布式事務存儲

2021-06-28 10:03:44

分布式數據庫架構

2020-03-31 16:13:26

分布式事務方案TCC

2019-07-25 15:32:35

分布式事務微服務系統架構

2024-12-09 09:35:00

2023-08-17 10:23:07

擴展方案

2019-09-09 10:09:51

分布式事務 數據庫

2020-09-23 09:52:01

分布式WebSocketMQ

2023-03-05 18:23:38

分布式ID節點

2010-06-30 17:27:32

SQL Server數

2021-06-25 10:35:58

分布式代碼Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 嫩草网| 国产高清视频一区 | 韩国成人在线视频 | 99精品视频一区二区三区 | 久久综合婷婷 | 日韩成人在线播放 | 亚洲日本欧美 | 久久只有精品 | 每日更新av | 日韩欧美中文字幕在线观看 | 国产福利视频网站 | 粉色午夜视频 | 亚洲国产一区二区三区在线观看 | 日本午夜网 | 午夜影院视频在线观看 | 国产成人在线看 | 午夜专区 | 成人亚洲精品 | 久久精品一区 | 欧美一级欧美一级在线播放 | 日韩在线大片 | 亚洲精品国产a久久久久久 午夜影院网站 | 国产高清免费在线 | 91视视频在线观看入口直接观看 | 国产成人免费视频 | 久久天天综合 | 亚洲欧美日韩中文在线 | 久久久性| 在线国产视频 | 国产一区二区三区 | 日韩综合在线 | 国产十日韩十欧美 | 国产成人精品区一区二区不卡 | 久久综合av | 国产成人99av超碰超爽 | 欧美成人精品欧美一级 | 五月天激情综合网 | 欧美精产国品一二三区 | 日韩欧美中文在线 | 久久一区二区三区免费 | 精品视频一区二区 |