この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 57382|答える: 3

[ASP.NET] ASP.NET コア(5)はCAP分散トランザクションに基づいています

[リンクをコピー]
2021年3月17日 18:12:50 に投稿 | | | |
CAPの原則

CAPの原理は、CAP定理とも呼ばれ、分散システムにおける一貫性、可用性、分割許容度を指します。 CAPの原理は、これら3つの要素が同時に2点しか達成できないと述べています。3つすべてを同時に取るのは不可能です

分散トランザクションの2PCおよび3PCモデル
https://www.itsvse.com/thread-9591-1-1.html

CAPの原則の本質はAP、CP、またはACのいずれかですが、CAPという概念はありません。 分散システムにデータのコピーが存在しない場合、システムは強整合性条件を満たす必要があります。なぜなら、一意なデータしか存在しないため、データ不整合は存在しません。この時点でCとPの2つの要素が存在する一方で、ネットワーク分割条件やダウンタイムが発生すると、必然的に一部のデータにアクセスできなくなり、可用性条件を満たせなくなります。すなわち、この場合CPシステムは得られますが、CAPは同時に満たされることはできません

復習:

ASP.NET Core(4) フィルター 統一モデルステートモデル検証
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET コア(iii) ActivatorUtilitiesを用いて動的にインスタンスを作成する
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET コア(2) コードによるアプリケーションの再起動
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core(1)はRedisキャッシュを使用しています
https://www.itsvse.com/thread-9393-1-1.html


DotNetCore.CAP

CAPは分散システム(SOA、マイクロサービス)におけるイベントバスおよび実装です。最終的な一貫性(Distributed Transactions)は、軽量で高性能、使いやすいオープンソースのC#ライブラリです。

GitHubアドレス:ハイパーリンクのログインが見えます。

Dotnet CAPはEvent Busのすべての機能を備えており、CAPはEventBusでの公開や購読をより効率化した方法を提供します。

MediatRは、単一のハンドラーに公開するためのSendメソッドと、複数のハンドラーに公開するためのPublish方式を提供する、非常に便利なプロセス中のメッセージサブスクリプションおよびパブリッシングフレームワークです。 現在、.NET Framework4.5、 NET Stardand1.3、. NET Stardand 2.0やその他のバージョンは、プラットフォーム上で使用可能です。

ASP.NET CoreはMediatR仲介モデルを使用しています
https://www.itsvse.com/thread-9272-1-1.html

アーキテクチャプレビュー



CAPはKafka、RabbitMQ、AzureServiceBus、AmazonSQSなどのメッセージキューをサポートし、データベースストレージとしてSql Server、MySql、PostgreSQL、MongoDBの拡張も提供しています。

この記事では、RabbitMQとSQL Serverをメッセージキューおよびストレージとして使用しています。

RabbitMQをインストールする

具体的なインストールチュートリアルについては、以下をご覧ください:

【実戦】RabbitMQのWindowsインストールチュートリアル
https://www.itsvse.com/thread-4630-1-1.html

【Practice】RabbitMQがウェブ管理プラグインをインストールする
https://www.itsvse.com/thread-4631-1-1.html
アカウントの追加も省略されていますので、以下を参照してください:

【プラクティス】rabbitMQコンソールでアカウント情報を追加する
https://www.itsvse.com/thread-4655-1-1.html
私自身がテストアカウントを追加し、仮想ホスト数を制限しました。以下のように示しています。



そうでなければ、誤差は次のようになります。

ACCESS_REFUSED - 認証機構PLAINによるログインが拒否されました。 詳細はブローカーログファイルをご覧ください。

指定されたエンドポイントはいずれも到達できませんでした

.NET CoreはCAPを統合しています

まず、送信者であり受信者でもある新しい ASP.NET コアプロジェクトを作成します。 Nugetコマンドを使って、このようにパッケージをインストールしてください:

起動時に、サービスメソッドConfigureServicesを次のように設定します:

ダッシュボードは以下の通り、ウェブサイト/capアドレスでご覧いただけます。



データ持続性:キャップは自動作成「公開済み」と「受信済み」は、2つのローカルデータベーステーブルです

テーブルを作成してください。 [公開](
        [id] [bigint] 無効ではありません。
        [バージョン] [ンヴァルチャル](20) 無効ではない、
        [名前] [ンヴァルチャル](200) 無効ではない、
        [内容] [ンヴァルチャル](マックス) NULL、
        [やり直し] [int] 無効ではありません。
        [追加] [日付2](7) 無効ではない、
        [有効期限切れ] [日付2](7) 無効、
        [ステータスネーム] [ンヴァルチャル](50) 無効ではない、
制約[PK_cap。 公開済み] 主キークラスタリング
(
        [同上] ASC
) (PAD_INDEX = オフ、STATISTICS_NORECOMPUTE = オフ、IGNORE_DUP_KEY = オフ、ALLOW_ROW_LOCKS = オン、ALLOW_PAGE_LOCKS = オン)が[プライマリ]
)[主要] TEXTIMAGE_ON [主要]
行け
テーブルを作成してください。 [受領済み](
        [id] [bigint] 無効ではありません。
        [バージョン] [ンヴァルチャル](20) 無効ではない、
        [名前] [ンヴァルチャル](200) 無効ではない、
        [グループ] [ンヴァルチャル](200) 無効、
        [内容] [ンヴァルチャル](マックス) NULL、
        [やり直し] [int] 無効ではありません。
        [追加] [日付2](7) 無効ではない、
        [有効期限切れ] [日付2](7) 無効、
        [ステータスネーム] [ンヴァルチャル](50) 無効ではない、
制約[PK_cap。 受信] 主鍵クラスタリング
(
        [同上] ASC
) (PAD_INDEX = オフ、STATISTICS_NORECOMPUTE = オフ、IGNORE_DUP_KEY = オフ、ALLOW_ROW_LOCKS = オン、ALLOW_PAGE_LOCKS = オン)が[プライマリ]
)[主要] TEXTIMAGE_ON [主要]
行け


HomeControllerのコントローラー方式は以下の通りです:

ユーザーが正常に登録すると、異なるトピックの3つのメッセージが送信され、その後加入者がそれらを消費します。

CAPが起動すると、同じ消費者グループの複数の消費者が同じトピックメッセージを消費した場合、デフォルトの消費者グループが作成されます。処刑される消費者は一人だけです。 逆にもし消費者が異なる消費者グループに属している場合、すべての消費者は実行されます

新しい.NET Coreコンソールプロジェクトを作成したり、サブスクライバー(消費者)として作成したり、パッケージを参照したりすると、ダッシュボードは無視できます。

コントローラー内にある場合は、[CapSubscribe(""])を直接追加して、関連するメッセージを購読してください。

もしあなたのメソッドがコントローラーにない場合、加入したクラスはICapSubscribeを継承し、[CapSubscribe(""]]タグを追加する必要があります。

コードは以下の通りです:

サブスクリプションクライアントを開き、メッセージ送信 http://localhost:28116/Home/UserRegister にアクセスしてみてください。効果は以下の通りです:



コンソールとコントローラー受信機の両方がトリガーされており、以下の図に示されています。



受信メッセージメソッドで手動で例外をスローしてみてください。コードは以下の通りです:

CAPは自動的にその方法を再試行します。失敗後の再試行回数はデフォルトで50回、再試行間隔はデフォルトで60秒です、下図に示されているように:



フレームワークはメッセージが一度だけ実行されることを100%確信することはできませんしたがって、いくつかの重要なシナリオでは、メッセージ側はメソッド実装の過程におけるビジネスの重複除去に注意を払います。

インターフェース冪等性の問題
https://www.itsvse.com/thread-6010-1-1.html

最後にソースコードを添付します:

観光客の皆さん、この投稿の隠された内容を見たい方は、どうぞ答える






先の:Markdown構文のCSVオンライン変換
次に:HttpClient POST はバイトバイト(gzip)圧縮リクエストを直接送信します
2021年3月18日 18:11:20に投稿 |
ぜひご覧ください。共有してくれてありがとうございます
2021年9月22日 20:42:18に投稿 |
学ぶことを...
2021年12月31日 15:08:21に投稿 |
学習
とても良い、とても素敵です
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com