日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2023-11-30 09:28:04 231觀看
導讀前言在分布式系統中,由于各個系統服務之間的獨立性和網絡通信的不確定性,要確保跨系統的事務操作的最終一致性是一項重大的挑戰。今天給大家推薦一個.NET開源的處理分布式事務的解決方案基于 .NET Standard 的 C# 庫:CAP

前言

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

CAP項目介紹

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

什么是 EventBus?

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

CAP架構預覽

圖片圖片yVW28資訊網——每日最新資訊28at.com

CAP支持的存儲

SQL Server、MySQL、PostgreSql、MongoDB、In-Memory Storage。yVW28資訊網——每日最新資訊28at.com

CAP 支持以下幾種運輸方式

RabbitMQ、Kafka、Azure Service Bus、Amazon SQS、NATS、In-Memory Queue、Redis Streams、Apache Pulsar。yVW28資訊網——每日最新資訊28at.com

怎么選擇運輸器

圖片圖片yVW28資訊網——每日最新資訊28at.com

項目源碼

圖片圖片yVW28資訊網——每日最新資訊28at.com

快速開始

安裝DotNetCore.CAP Nuget包

圖片圖片yVW28資訊網——每日最新資訊28at.com

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

  • 我本地安裝的是DotNetCore.CAP.RabbitMQ。
//你可以按需選擇下面的包進行安裝:PM> Install-Package DotNetCore.CAP.KafkaPM> Install-Package DotNetCore.CAP.RabbitMQPM> Install-Package DotNetCore.CAP.AzureServiceBusPM> Install-Package DotNetCore.CAP.AmazonSQSPM> Install-Package DotNetCore.CAP.NATSPM> Install-Package DotNetCore.CAP.RedisStreamsPM> Install-Package DotNetCore.CAP.Pulsar

圖片圖片yVW28資訊網——每日最新資訊28at.com

CAP 提供了主流數據庫作為存儲:

  • 我本地安裝的是DotNetCore.CAP.MongoDB。
// 按需選擇安裝你正在使用的數據庫:PM> Install-Package DotNetCore.CAP.SqlServerPM> Install-Package DotNetCore.CAP.MySqlPM> Install-Package DotNetCore.CAP.PostgreSqlPM> Install-Package DotNetCore.CAP.MongoDB

圖片圖片yVW28資訊網——每日最新資訊28at.com

配置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 進行消息發送。yVW28資訊網——每日最新資訊28at.com

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 來訂閱相關消息。yVW28資訊網——每日最新資訊28at.com

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

Service Method

如果你的訂閱方法沒有位于 Controller 中,則你訂閱的類需要繼承 ICapSubscribe:yVW28資訊網——每日最新資訊28at.com

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)        {        }    }}

項目源碼地址

更多項目實用功能和特性歡迎前往項目開源地址查看

本文鏈接:http://www.www897cc.com/showinfo-26-35288-0.html.NET開源的處理分布式事務的解決方案

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 消息隊列備選架構選擇,你選擇哪個?

下一篇: 利用 Golang 中的 Recover 處理錯誤

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 海林市| 买车| 开平市| 油尖旺区| 探索| 紫金县| 甘谷县| 越西县| 河东区| 白银市| 北川| 瓮安县| 南乐县| 高碑店市| 措美县| 新兴县| 阜新市| 浦北县| 南江县| 沁水县| 巴塘县| 赫章县| 华池县| 恩施市| 弥勒县| 扶风县| 米泉市| 万全县| 兴化市| 招远市| 隆回县| 安远县| 上高县| 调兵山市| 固阳县| 宾川县| 象山县| 前郭尔| 宜宾市| 家居| 依兰县|