背景
私は、その後、分布はで分散アプリケーションを構築する過程で遭遇するマイクロサービスの構築ではない場合も紹介そんなにマイクロサービスを構築する過程でマイクロサービスに関する以前の記事は、そのようなことを必要としないと考えています問題のトランザクションは、その後、CAPは、出生のこの文脈です。
当初は昨年末(2016)にこの事をするつもり、もともと分散システム分散トランザクションで問題を解決して、コンセプトのラフなアウトラインを持つように意図されていた、私は非同期メッセージングに前の二つの記事のためだったとマイクロサービスとの間の通信は、ただ、これはこのシリーズの問題を解決し、次に行うために着手し、最終的に発見し、これらの概念が実際に一致することができると思い、あまり理解できません。
連続復興と修正の6ヵ月後、最終CAP 1.0バージョンがリリースされました。オープンソースのプロジェクトとして、元のプロジェクトは、私の個人的GitHubの下にあった、そして先月はに貢献してきました .NET中国財団の 組織、プロジェクトが共同で私とDotNetCoreチームによって維持。
CAPはじめに
Githubの:https://github.com/dotnetcore/CAP
オープンソースライセンス:MIT
CAPは、オープンソースのC#ライブラリ分散システム(SOA、MicroService)で実現イベントバスと結果整合性(分散トランザクション)で、彼女は簡単に使用する機能に軽量、高い性能を持っています。
あなたは簡単に含む.NETコア技術に基づいて、CAP分散システムを導入しましたが、.NET Frameworkの上のASP.NET CoreおよびASP.NETコアに限定することはできません。
CAPパッケージはNuGetの形で提供され、プロジェクトの任意の侵入せず、あなたはまだ分散システムを構築するためにあなたの好きな道を注文することができます。
CAPは、イベントバスのすべての機能を持っており、CAPは、パブリッシュ/サブスクライブEventBusを処理するために、より合理化された方法を提供します。
CAPは、サービスやダウンタイムを再起動すると、彼女はメッセージの信頼性を確保することができ、あるメッセージの永続化機能を有しています。
CAPの実装結果整合分散トランザクション、あなたは、このような些細な細部に対処する必要はありませんでした。
CAPは、Microsoft DIに基づいて、APIサービスを提供し、彼女がシームレスにあなたのASP.NETコア・システムと統合することができ、あなたのビジネスコードトランザクションのサポート、強力な一貫性と統合することができます。
CAPは、無料のオープンソースです。オープンソースMITライセンスに基づいてCAPは、あなたの個人的または商業的なプロジェクトに自由に使用することが、誰もあなたに課金されます。
入門
現在、CAPは、カフカ、Azureのサービスバスなどのメッセージが底部との間に送られたが、使用するのRabbitMQをサポートし、あなたはまだ簡単にプロジェクトに統合することができ、これらのメッセージキューの経験を持っている必要はありません。
CAPは、現在のプロジェクトSQL Serverのは、MySQL、PostgreSQLの、MongoDBのデータベースをサポートしています。
CAPはEntityFrameworkCoreおよびADO.NETプロジェクトの使用をサポートし、必要に応じて、あなたは、異なる構成を選択することができます。
以下は、システム内のCAPの不完全な概略図です。
実線の部分はユーザコードを表し、内側の破線部分は、CAPが達成表します。
以下では、CAPがプロジェクトに統合する方法を見てみましょう。
ステップ1:
あなたはCAP NuGetパッケージをインストールするには、以下のコマンドを実行することができます。
PM> Install-Package DotNetCore.CAP
基礎となるメッセージキュー、あなたは別のパッケージを導入するために選択することができます。
PM> Install-Package DotNetCore.CAP.Kafka PM> Install-Package DotNetCore.CAP.RabbitMQ PM> Install-Package DotNetCore.CAP.AzureServiceBus
CAPは現在、SQL Serverの使用をサポートし、PostgreSQLは、MySQLや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 //需要 MongoDB 4.0+ 集群
ステップ2:
で Startup.cs
、ファイル、次の設定を追加します:
public void ConfigureServices(IServiceCollection services)
{
......
services.AddDbContext<AppDbContext>();
services.AddCap(x =>
{
//如果你使用的 EF 进行数据操作,你需要添加如下配置:
x.UseEntityFramework<AppDbContext>(); //可选项,你不需要再次配置 x.UseSqlServer 了 //如果你使用的ADO.NET,根据数据库选择进行配置: x.UseSqlServer("数据库连接字符串"); x.UseMySql("数据库连接字符串"); x.UsePostgreSql("数据库连接字符串"); //如果你使用的 MongoDB,你可以添加如下配置: x.UseMongoDB("ConnectionStrings"); //注意,仅支持MongoDB 4.0+集群 //CAP支持 RabbitMQ、Kafka、AzureServiceBus 等作为MQ,根据使用选择配置: x.UseRabbitMQ("ConnectionStrings"); x.UseKafka("ConnectionStrings"); x.UseAzureServiceBus("ConnectionStrings"); }); }
公開イベント/ニュース
コントローラ内注入は 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); 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(); } }
イベント/メッセージを購読
では Controller
ミドル:
コントローラが直接追加されている場合は[CapSubscribe("")]
、関連する情報をサブスクライブします。
public class PublishController : Controller
{
[NoAction] [CapSubscribe("xxx.services.show.time")] public async Task CheckReceivedMessage(DateTime time) { Console.WriteLine(time); return Task.CompletedTask; } }
で xxxService
真ん中:
あなたのアプローチがコントローラにない場合は、クラスの継承に加入する必要があります ICapSubscribe
追加し、[CapSubscribe("")]
マークを:
namespace xxx.Service
{
public interface ISubscriberService { public void CheckReceivedMessage(DateTime time); } public class SubscriberService: ISubscriberService, ICapSubscribe { [CapSubscribe("xxxx.services.show.time")] public void CheckReceivedMessage(DateTime time) { } } }
そして、 Startup.cs
中ConfigureServices()に注入し、あなたの ISubscriberService
クラス
public void ConfigureServices(IServiceCollection services) { services.AddTransient<ISubscriberService,SubscriberService>(); }
以上、簡単な方法ではないでしょうか?
謝辞
ありがとうござい LANイェジンの プロジェクトの学生の英語翻訳を。
ありがとうござい AlexLEWISの 学生にプロジェクトの追加サポートを。
ありがとうござい .NET中国財団の プロジェクトをサポートするために、チームメンバーを。
概要
ご質問があれば、あなたが私たちのGithub提出問題に行くことができる、我々は最初の時間を処理します。
あなたは、このオープンソースプロジェクトでも良いと感じたら、それは素晴らしいことだGithubのスターのサポートを与えます。
あなたはあなたにこの記事が参考に思われる場合、あなたは簡単に1 [推奨]ポイントああ、ブロガーで見ることができます。
この記事のアドレス:http://www.cnblogs.com/savorboard/p/cap.html
ブログの:Savorboard
転載を歓迎するが、目立つ場所にあるソースとのリンクを明記してください
背景
私は、その後、分布はで分散アプリケーションを構築する過程で遭遇するマイクロサービスの構築ではない場合も紹介そんなにマイクロサービスを構築する過程でマイクロサービスに関する以前の記事は、そのようなことを必要としないと考えています問題のトランザクションは、その後、CAPは、出生のこの文脈です。
当初は昨年末(2016)にこの事をするつもり、もともと分散システム分散トランザクションで問題を解決して、コンセプトのラフなアウトラインを持つように意図されていた、私は非同期メッセージングに前の二つの記事のためだったとマイクロサービスとの間の通信は、ただ、これはこのシリーズの問題を解決し、次に行うために着手し、最終的に発見し、これらの概念が実際に一致することができると思い、あまり理解できません。
連続復興と修正の6ヵ月後、最終CAP 1.0バージョンがリリースされました。オープンソースのプロジェクトとして、元のプロジェクトは、私の個人的GitHubの下にあった、そして先月はに貢献してきました .NET中国財団の 組織、プロジェクトが共同で私とDotNetCoreチームによって維持。
CAPはじめに
Githubの:https://github.com/dotnetcore/CAP
オープンソースライセンス:MIT
CAPは、オープンソースのC#ライブラリ分散システム(SOA、MicroService)で実現イベントバスと結果整合性(分散トランザクション)で、彼女は簡単に使用する機能に軽量、高い性能を持っています。
あなたは簡単に含む.NETコア技術に基づいて、CAP分散システムを導入しましたが、.NET Frameworkの上のASP.NET CoreおよびASP.NETコアに限定することはできません。
CAPパッケージはNuGetの形で提供され、プロジェクトの任意の侵入せず、あなたはまだ分散システムを構築するためにあなたの好きな道を注文することができます。
CAPは、イベントバスのすべての機能を持っており、CAPは、パブリッシュ/サブスクライブEventBusを処理するために、より合理化された方法を提供します。
CAPは、サービスやダウンタイムを再起動すると、彼女はメッセージの信頼性を確保することができ、あるメッセージの永続化機能を有しています。
CAPの実装結果整合分散トランザクション、あなたは、このような些細な細部に対処する必要はありませんでした。
CAPは、Microsoft DIに基づいて、APIサービスを提供し、彼女がシームレスにあなたのASP.NETコア・システムと統合することができ、あなたのビジネスコードトランザクションのサポート、強力な一貫性と統合することができます。
CAPは、無料のオープンソースです。オープンソースMITライセンスに基づいてCAPは、あなたの個人的または商業的なプロジェクトに自由に使用することが、誰もあなたに課金されます。
入門
現在、CAPは、カフカ、Azureのサービスバスなどのメッセージが底部との間に送られたが、使用するのRabbitMQをサポートし、あなたはまだ簡単にプロジェクトに統合することができ、これらのメッセージキューの経験を持っている必要はありません。
CAPは、現在のプロジェクトSQL Serverのは、MySQL、PostgreSQLの、MongoDBのデータベースをサポートしています。
CAPはEntityFrameworkCoreおよびADO.NETプロジェクトの使用をサポートし、必要に応じて、あなたは、異なる構成を選択することができます。
以下は、システム内のCAPの不完全な概略図です。
実線の部分はユーザコードを表し、内側の破線部分は、CAPが達成表します。
以下では、CAPがプロジェクトに統合する方法を見てみましょう。
ステップ1:
あなたはCAP NuGetパッケージをインストールするには、以下のコマンドを実行することができます。
PM> Install-Package DotNetCore.CAP
基礎となるメッセージキュー、あなたは別のパッケージを導入するために選択することができます。
PM> Install-Package DotNetCore.CAP.Kafka PM> Install-Package DotNetCore.CAP.RabbitMQ PM> Install-Package DotNetCore.CAP.AzureServiceBus
CAPは現在、SQL Serverの使用をサポートし、PostgreSQLは、MySQLや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 //需要 MongoDB 4.0+ 集群
ステップ2:
で Startup.cs
、ファイル、次の設定を追加します:
public void ConfigureServices(IServiceCollection services)
{
......
services.AddDbContext<AppDbContext>();
services.AddCap(x =>
{
//如果你使用的 EF 进行数据操作,你需要添加如下配置:
x.UseEntityFramework<AppDbContext>(); //可选项,你不需要再次配置 x.UseSqlServer 了 //如果你使用的ADO.NET,根据数据库选择进行配置: x.UseSqlServer("数据库连接字符串"); x.UseMySql("数据库连接字符串"); x.UsePostgreSql("数据库连接字符串"); //如果你使用的 MongoDB,你可以添加如下配置: x.UseMongoDB("ConnectionStrings"); //注意,仅支持MongoDB 4.0+集群 //CAP支持 RabbitMQ、Kafka、AzureServiceBus 等作为MQ,根据使用选择配置: x.UseRabbitMQ("ConnectionStrings"); x.UseKafka("ConnectionStrings"); x.UseAzureServiceBus("ConnectionStrings"); }); }
公開イベント/ニュース
コントローラ内注入は 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); 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(); } }
イベント/メッセージを購読
では Controller
ミドル:
コントローラが直接追加されている場合は[CapSubscribe("")]
、関連する情報をサブスクライブします。
public class PublishController : Controller
{
[NoAction] [CapSubscribe("xxx.services.show.time")] public async Task CheckReceivedMessage(DateTime time) { Console.WriteLine(time); return Task.CompletedTask; } }
で xxxService
真ん中:
あなたのアプローチがコントローラにない場合は、クラスの継承に加入する必要があります ICapSubscribe
追加し、[CapSubscribe("")]
マークを:
namespace xxx.Service
{
public interface ISubscriberService { public void CheckReceivedMessage(DateTime time); } public class SubscriberService: ISubscriberService, ICapSubscribe { [CapSubscribe("xxxx.services.show.time")] public void CheckReceivedMessage(DateTime time) { } } }
そして、 Startup.cs
中ConfigureServices()に注入し、あなたの ISubscriberService
クラス
public void ConfigureServices(IServiceCollection services) { services.AddTransient<ISubscriberService,SubscriberService>(); }
以上、簡単な方法ではないでしょうか?
謝辞
ありがとうござい LANイェジンの プロジェクトの学生の英語翻訳を。
ありがとうござい AlexLEWISの 学生にプロジェクトの追加サポートを。
ありがとうござい .NET中国財団の プロジェクトをサポートするために、チームメンバーを。
概要
ご質問があれば、あなたが私たちのGithub提出問題に行くことができる、我々は最初の時間を処理します。
あなたは、このオープンソースプロジェクトでも良いと感じたら、それは素晴らしいことだGithubのスターのサポートを与えます。
あなたはあなたにこの記事が参考に思われる場合、あなたは簡単に1 [推奨]ポイントああ、ブロガーで見ることができます。
この記事のアドレス:http://www.cnblogs.com/savorboard/p/cap.html
ブログの:Savorboard
転載を歓迎するが、目立つ場所にあるソースとのリンクを明記してください