国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

開源:Taurus.DTC 微服務分布式事務框架,支持 .Net 和 .Net Core 雙系列版本

這篇具有很好參考價值的文章主要介紹了開源:Taurus.DTC 微服務分布式事務框架,支持 .Net 和 .Net Core 雙系列版本。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言:

在經過1年多的深思,十幾年的框架編寫技術沉淀下,花了近一個月的時間,終于又為 .Net 及 .Net Core 的微服務系列框架貢獻當中的一個重要組件。

1、開源地址:

https://github.com/cyq1162/Taurus.DTC

開源:Taurus.DTC 微服務分布式事務框架,支持 .Net 和 .Net Core 雙系列版本

?

2、Nuget?包引用ID:

由于 CYQ.Data?Orm 組件本身支持10多種數據庫,因此提供的包,只根據消息隊列的需要分拆提供。

默認Taurus.DTC?支持同時使用?RabbitMQ?和 Kafka?兩種消息隊列。

如果一個項目中只用RabbitMQ,則引入 Tarurus.DTC.RabbitMQ,減少對 Kafka?的依賴包。

開源:Taurus.DTC 微服務分布式事務框架,支持 .Net 和 .Net Core 雙系列版本

3、Taurus.DTC?微服務分布式事務框架基礎說明:

基礎說明:

1、框架分為 Client(客戶端,即調用端)和 Server(服務端,即服務提供方)。

2、項目需要選擇數據存儲類型(數據庫或分布式緩存)和數據傳輸類型(消息隊列)。

3、框架的名稱空間:Taurus.Plugin.DistributedTransaction。

4、框架在設計上采用異步最終一致性的設計理念,并實現了無需入侵業(yè)務數據庫的機制。

數據存儲:

可選擇數據庫(MSSQL、MySql、Oracle、PostgreSql 等 CYQ.Data 所支持的10多種數據庫之一)

MSSQL配置示例如下:

{
  "ConnectionStrings": {
    "DTC.Server.Conn": "server=.;database=MSLog;uid=sa;pwd=123456"
  }
}

也可選擇分布式緩存存儲,配置示例如下(二者選其一即可):

{
  "AppSettings": {
  "Redis.Servers":"127.0.0.1:6379 ,192.168.1.111:6379-withpassword",
  "MemCache.Servers":"127.0.0.1:11211" 
  }
}

消息隊列:

目前消息隊列支持 RabbitMQ 或者 Kafka(配置其中一方即可):

{
  "AppSettings": {
  "DTC.Server.Rabbit":"127.0.0.1;guest;guest;/",//ip;username;password;virtualpath;
  "DTC.Server.Kafka":"127.0.0.1:9092" 
  }
}

以上配置為Server端,客戶端更改 Server 為 Client 即可。

名稱空間下提供類庫使用:

DTC:

Client 端:提供三個方法,事務提交、事務回滾、任務發(fā)布。
DTC.Client.CommitAsync(...) //事務提交
DTC.Client.RollBacktAsync(...) //事務回滾
DTC.Client.PublishTaskAsync(...) //發(fā)布任務

Server 端:提供一個方法,事務訂閱 DTC.Server.Subscribe(...) //訂閱事務回調。

DTCConfig:

左側為代碼,右側為配置 AppSettings 的 key
// 是否啟用,默認 true
DTCConfig.Client.IsEnable,對應配置項:DTC.Client.IsEnable
// 是否打印追蹤日志,日志寫入App_Data\log 目錄。
DTCConfig.Client.IsPrintTraceLog,對應配置項:DTC.Client.IsPrintTraceLog
// 配置數據庫存儲鏈接,鏈接 key 是在 ConnectionStrings 中。
DTCConfig.Client.Conn,對應配置項:DTC.Client.Conn
//配置數據庫對應生成的表名:默認DTC_Client
DTCConfig.Client.TableName,對應配置項:DTC.Client.TableName
//配置使用的RabbitMQ消息隊列,配置格式為:ip;username;password;virtualpath;
DTCConfig.Client.Rabbit,對應配置項:DTC.Client.Rabbit
//配置使用的Kafka消息隊列,配置格式為:ip:port
DTCConfig.Client.Kafka,對應配置項:DTC.Client.Kafka
//以下為定時線程任務配置:
//掃描的間隔時間
DTCConfig.Client.Worker.ScanDBSecond,對應配置項:DTC.Client.ScanDBSecond
//事務或任務確認完成狀態(tài)時,清除模式是刪除還是轉移到歷史表,對應:DTC_Client_History
DTCConfig.Client.Worker.ConfirmClearMode,對應配置項:DTC.Client.ConfirmClearMode
//事務或任務未完成狀態(tài)時,保留秒數。
DTCConfig.Client.Worker.TimeoutKeepSecond,對應配置項:DTC.Client.TimeoutKeepSecond
//事務或任務未完成狀態(tài)時,清除模式是刪除還是轉移到歷史表,對應:DTC_Client_History
DTCConfig.Client.Worker.TimeoutClearMode,對應配置項:DTC.Client.TimeoutClearMode
//事務或任務未完成狀態(tài)時,最大可重試次數。
DTCConfig.Client.Worker.MaxRetries,對應配置項:DTC.Client.MaxRetries

Server 和 Client 的配置屬性一致,僅 Client 換成 Server。

DTC 特性標準和方法回調參數:

Server 端:
特性標注:DTCServerSubscribe
回調參數:DTCServerSubscribePara 

Client 端:
特性標注:DTCClientCallBack
回調參數:DTCClientCallBackPara 

4、Server 端 使用 .Net Core 示例:

1、Nuget 搜索 Taurus.DTC 引入工程項目中。

2、Program 或 Startup 添加服務使用引入:

  services.AddTaurusDtc(); // 服務添加
  app.UseTaurusDtc(StartType.Server); //服務使用,啟用服務端

3、appsettings.json 配置基本屬性:

  {
  "ConnectionStrings": {
    "DTC.Server.Conn": "host=localhost;port=3306;database=cyqdata;uid=root;pwd=123456;Convert Zero Datetime=True;"
  },
  "AppSettings": {
    "DTC.Server.Rabbit": "127.0.0.1;guest;guest;/" //IP;UserName;Password;VirtualPaath
}

4、選擇數據庫對應的依賴組件,如MySql,可以:

Nuget 上可以搜索 MySql.Data 、或者 CYQ.Data.MySql (會自動引入MySql.Data)  都可, 引入項目即可。

5、代碼編寫,可以參考源碼中提供的示例代碼,如下:

    public class ServerController : Taurus.Mvc.Controller
    {
    /// <summary>
    /// provide a Create api , and it provide a transation , call https://localhost:5001/server/create
    /// </summary>
    [HttpPost]
    [Require("name")]
    public void Create(string name)
    {
        //do something insert
        int createID = 123456;
        //here will receive a header:X-Request-ID 
        if (DTC.Server.Subscribe(createID.ToString(), "OnCreate")) // 事務相關信息保存,以便后續(xù)回調處理提交或回滾
        {
            Console.WriteLine("call : DTC.Server.Subscribe call.");
        }
        Write(createID, true);
    }


    [DTCServerSubscribe("OnCreate")] //訂閱回調,處理提交或回滾
    private static bool AnyMethodNameForOnCreateCallBack(DTCServerSubscribePara para)
    {
        para.CallBackContent = "what message you need?";
        Console.WriteLine("call back :" + para.ExeType + " , content :" + para.Content);
        if (para.ExeType == ExeType.Commit) { return true; }
        if (para.ExeType == ExeType.RollBack)
        {
            string createID = para.Content;
            //return DeleteByID(createID);
            return true;
        }
        return false;
    }

    [DTCServerSubscribe("ToDoTask")] // 訂閱任務
    private static bool DoSomeTask(DTCServerSubscribePara para)
    {
        Console.WriteLine("call :" + para.ExeType + " , content :" + para.Content);
        para.CallBackContent = "I do ok.";
        return true;
    }

}

5、Client 端 使用 .Net Core 示例:

1、Nuget 搜索 Taurus.DTC 引入工程項目中。

2、Program 或 Startup 添加服務使用引入:

  services.AddTaurusDtc(); // 服務添加
  app.UseTaurusDtc(StartType.Client); //服務使用,啟用服務端

3、appsettings.json 配置基本屬性:

  {
  "ConnectionStrings": {
    "DTC.Client.Conn": "host=localhost;port=3306;database=cyqdata;uid=root;pwd=123456;Convert Zero Datetime=True;"
  },
  "AppSettings": {
    "DTC.Client.Rabbit": "127.0.0.1;guest;guest;/" //IP;UserName;Password;VirtualPaath
}

4、選擇數據庫對應的依賴組件,如MySql,可以:

Nuget 上可以搜索 MySql.Data 、或者 CYQ.Data.MySql (會自動引入MySql.Data)  都可, 引入項目即可。

5、代碼編寫,可以參考源碼中提供的示例代碼,如下:

   public class ClientController : Taurus.Mvc.Controller
    {
        [HttpGet]
        public void Transation()
        {
            //do something
            RpcTask task = Rpc.StartPostAsync("https://localhost:5001/server/create", Encoding.UTF8.GetBytes("name=hello world"));
            if (task.Result.IsSuccess)
            {
                if (JsonHelper.IsSuccess(task.Result.ResultText))
                {
                    if (DTC.Client.CommitAsync(1, "OnOK"))
                    {
                        Console.WriteLine("call : DTC.Client.CommitAsync.");
                    }
                    Write("Commit OK.", true);
                    return;
                }
            }
            if (DTC.Client.RollBackAsync(1, "OnFail"))
            {
                Console.WriteLine("call : DTC.Client.RollBackAsync call.");
            }
            Write("RollBack ing....", false);
        }
    [DTCClientCallBack("OnFail")]
    [DTCClientCallBack("OnOK")]
    [DTCClientCallBack("OnDoOK")]
    private void OnCallBack(DTCClientCallBackPara para)
    {
        Console.WriteLine("call back : " + para.ExeType + " - " + para.CallBackKey + " - " + para.CallBackContent);
    }


    /// <summary>
    /// to publish a new task , start https://localhost:5000/client/publishtask
    /// </summary>
    [HttpGet]
    public void PublishTask()
    {
        if (DTC.Client.PublishTaskAsync("I give you some info.", "ToDoTask", "OnDoOK"))
        {
            Console.WriteLine("call : DTC.Client.PublishTaskAsync.");
        }
        Write("Publish Task OK.", true);
    }

}

6、其它:CYQ.Data?支持的數據庫鏈接語句示例

###--------------------------------------------------------###

   Txt::  Txt Path=E:\
   Xml::  Xml Path=E:\
Access::  Provider=Microsoft.Jet.OLEDB.4.0; Data Source=E:\cyqdata.mdb
Sqlite::  Data Source=E:\cyqdata.db;failifmissing=false;
 MySql::  host=localhost;port=3306;database=cyqdata;uid=root;pwd=123456;Convert Zero Datetime=True;
 Mssql::  server=.;database=cyqdata;uid=sa;pwd=123456;provider=mssql; 
Sybase::  data source=127.0.0.1;port=5000;database=cyqdata;uid=sa;pwd=123456;provider=sybase; 
Postgre:  server=localhost;uid=sa;pwd=123456;database=cyqdata;provider=pg; 
    DB2:  Database=SAMPLE;User ID=administrator;Server=127.0.0.1;password=1234560;provider=db2; 
FireBird  user id=SYSDBA;password=123456;database=d:\\test.dbf;server type=Default;data source=127.0.0.1;port number=3050;provider=firebird;
Dameng::  user id=SYSDBA;password=123456789;data source=127.0.0.1;schema=test;provider=dameng;
KingBaseES server=127.0.0.1;User Id=system;Password=123456;Database=test;Port=54321;schema=public;provider=kingbasees;
Oracle ODP.NET::
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT = 1521)))(CONNECT_DATA =(SID = orcl)));User ID=sa;password=123456

由于各種數據庫鏈接語句基本一致,除了特定寫法外,可以通過鏈接補充:provider=mssql、provider=mysql、provider=db2、provider=postgre等來區(qū)分。
###--------------------------------------------------------###

7、總結:

原本的設計是作為?Taurus.Mvc?微服務系列中的一個插件,單獨內部集成使用,后來想了想,還是在設計中獨立了出來,支持在任意 Mvc 框架中使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-783234.html

到了這里,關于開源:Taurus.DTC 微服務分布式事務框架,支持 .Net 和 .Net Core 雙系列版本的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【springcloud微微服務】分布式事務框架Seata使用詳解

    目錄 一、前言 二、事務簡介 2.1 原子性 2.2 一致性 2.3?隔離性 2.4?持久性

    2023年04月26日
    瀏覽(17)
  • Java微服務分布式事務框架seata的TCC模式

    Java微服務分布式事務框架seata的TCC模式

    ??作者主頁:青花鎖 ??簡介:Java領域優(yōu)質創(chuàng)作者??、Java微服務架構公號作者?? ??簡歷模板、學習資料、面試題庫、技術互助 ??文末獲取聯系方式 ?? 專欄 描述 Java項目實戰(zhàn) 介紹Java組件安裝、使用;手寫框架等 Aws服務器實戰(zhàn) Aws Linux服務器上操作nginx、git、JDK、Vue Jav

    2024年03月23日
    瀏覽(24)
  • 【分布式事務】Seata 開源的分布式事務解決方案

    【分布式事務】Seata 開源的分布式事務解決方案

    Seata 是一款開源的分布式事務解決方案,致力于提供高性能和簡單易用的分布式事務服務。Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務模式,為用戶打造一站式的分布式解決方案。 阿里巴巴作為國內最早一批進行應用分布式(微服務化)改造的企業(yè),很早就遇到微服務架構下

    2024年02月02日
    瀏覽(18)
  • 分布式事務框架Seata

    分布式事務框架Seata

    分布式事務框架Seata 一、seata是什么 在微服務架構下,由于數據庫和應用服務的拆分,導致原本一個事務單元中的多個 DML 操作,變成了跨進程或者跨數據庫的多個事務單元的多個 DML 操作, 而傳統(tǒng)的數據庫事務無法解決這類的問題,所以就引出了分布式事務的概念。 分布式

    2024年02月10日
    瀏覽(24)
  • 開源.NET8.0小項目偽微服務框架(分布式、EFCore、Redis、RabbitMQ、Mysql等)

    開源.NET8.0小項目偽微服務框架(分布式、EFCore、Redis、RabbitMQ、Mysql等)

    為什么說是偽微服務框架,常見微服務框架可能還包括服務容錯、服務間的通信、服務追蹤和監(jiān)控、服務注冊和發(fā)現等等,而我這里為了在使用中的更簡單,將很多東西進行了簡化或者省略了。 年前到現在在開發(fā)一個新的小項目,剛好項目最初的很多功能是比較通用的,所以

    2024年03月09日
    瀏覽(21)
  • SpringCloud入門實戰(zhàn)(十五)分布式事務框架Seata簡介

    SpringCloud入門實戰(zhàn)(十五)分布式事務框架Seata簡介

    ?? 學技術、更要掌握學習的方法,一起學習,讓進步發(fā)生 ???? 作者:一只IT攻城獅 ,關注我,不迷路 。 ??學習建議:1、養(yǎng)成習慣,學習java的任何一個技術,都可以先去官網先看看,更準確、更專業(yè)。 ??學習建議:2、然后記住每個技術最關鍵的特性(通常一句話或者

    2024年02月10日
    瀏覽(28)
  • Apache Seata -- 一款開源的分布式事務解決方案

    Apache Seata -- 一款開源的分布式事務解決方案

    1.1?分布式事務簡介 (1)事務 事務可以看做是一次大的活動,它由不同的小活動組成,這些活動要么全部成功,要么全部失敗。 (2)本地事務 ? 在計算機系統(tǒng)中,更多的是通過關系型數據庫來控制事務,這是利用數據庫本身的事務特性來實現的,因此叫數據庫事務,由于

    2024年03月17日
    瀏覽(21)
  • 微服務·數據一致-事務與分布式事務

    微服務·數據一致-事務與分布式事務

    事務是計算機科學和數據庫管理中的一個關鍵概念,用于確保數據的一致性和可靠想。事務管理是大多數應用程序和數據庫系統(tǒng)中不可或缺的一部分。分布式事務擴展了事務的概念,用于多個分布式系統(tǒng)和服務的數據一致性管理。本調查報告將深入探討事務和分布式事務的概

    2024年02月09日
    瀏覽(20)
  • 微服務分布式事務處理

    微服務分布式事務處理

    當我們向微服務架構遷移時,如何處理好分布式事務是必須考慮的問題。這篇文章介紹了分布式事務處理的兩種方案,可以結合實際采用合適的解決方案。原文:Handling Distributed Transactions in the Microservice world [1] 如今每個人(包括我)都在思考、構建微服務,分布式系統(tǒng)是微服

    2024年02月04日
    瀏覽(21)
  • 微服務--Seata(分布式事務)

    微服務--Seata(分布式事務)

    TCC模式在代碼中實現:侵入性強,并且的自己實現事務控制邏輯 Try,Confirm() cancel() 第三方開源框架:BeyeTCCTCC-transactionHimly 異步實現:MQ可靠消息最終一致性 @GlobalTransacational---AT模式

    2024年02月10日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包