DotnetCore.CAPとSignalRリレーデータプッシュ

11560 ワード

DotnetCore.CAPはデータの最終的な一貫性を実現するためのオープンソース方式であり、SignalRはマイクロソフトASPである.NET/ASP.NET Coreシステムのリアルタイムデータ転送ソリューションでは、2つのテクノロジーが交差していないように見えますが、具体的なビジネスは両者を結びつけることができます.
DotnetCore.CAPの基本的な実装は、データベースとメッセージキューを接続し、データのパブリケーション/サブスクリプションによって異なるデータソース間の最終的な一貫性を実現することであり、その利点はデータの信頼性の高い伝送(メッセージキューの利点を利用しているが、100%信頼性があるとは言えない)とアプリケーション環境の多様性(メッセージキューはkafkarabbitmqazureなどをサポートし、データベースはsqlservermysqlmongodbなどをサポートする)である.でもDotnetCore.CAPの使用シーンは一般にヘビー級のクライアントであり,Webページに直接データをプッシュすることはできないようである.
SignalRの基礎的な実現はネットワーク環境によって自動的に長接続、ポーリングあるいはWebSocketを切り替えてデータのリアルタイム伝送を実現することであり、基本的な使用方法も発表/購読モードであり、その優位性はデータのリアルタイム伝送とWeb応用に対する友好的なサポートであり、最も重要なのはマイクロソフトの親子であり、ASP.NET Coreの融合度が高い.しかし、SignalRはデータの信頼性にあまり保障されておらず、同時性が高い能力はメッセージキューに比べて差があります.
DotnetCore.CAPとSignalRは、同じ鉄道や道路のように、データを連通する異なる通路であり、それぞれ優位性がある.両者を結合する目的は、メッセージキューをデータ伝送のメインストリートとし、SignalRはデータ伝送の「最後のキロ」を解決し、DotnetCore.CAPはメッセージキューとSignalRを接続することを担当する.

1.DotnetCore.CAP


1.1.インストール構成


Nugetマネージャを使用するASP.NET CoreプロジェクトはDotNetCoreをインストールする.CAP.KafkaとDotNetCore.CAP.MySql、コアライブラリDotNetCoreを含む.CAP.
スタートを切るcsファイルを構成します.コンフィギュレーション・サービス・メソッドに、コード構成データベースおよびメッセージ・キュー接続文字列を追加します.
  services.AddCap(x =>
  {
      x.UseMySql(_appConfiguration["ConnectionStrings:Default"]);
      x.UseKafka(_appConfiguration["MQ:Host"]);
      x.UseDashboard();
  });

コンフィギュレーションメソッドにコードを追加してデータパネルを有効にします.
	app.UseCapDashboard();

1.2.データの購読/配布


新しいASP.NET Core MVCコントローラMessageController,DotNetCoreに注入する.CAPのパブリケーションサービスは、Attributeプロパティとしてデータの購読方法を定義します.
    public class MessageController : Controller
    {
        private readonly ICapPublisher _publisher;
        public MessageController(ICapPublisher publisher)
        {
            _publisher = publisher;
        }

        [NonAction]
        [CapSubscribe(”TopicName“,Group =”GroupName“)]
        public void DataSubscribe(string message)
        {
            try
            {
                Logger.Info(message);
                //        
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
            }

        }
}

2.SignalR


2.1.インストール構成


NuGetマネージャを使用するASP.NET CoreプロジェクトはMicrosoftをインストールします.AspNetCore.SignalR.
スタートを切るcsファイルを構成します.
コンフィギュレーションサービスメソッドにコード設定SignalR基本構成を追加します.
	services.AddSignalR();

Configureメソッドでハブルーティングを構成します.
      app.UseEndpoints(endpoints =>
      {
          endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
  			//SignalR  
          endpoints.MapHub("/messagebus");
      });

2.2.データの購読/配布


新しいハブクラスMessageHubは、Microsoftから継承されます.AspNetCore.SignalR.Hub.
    public class MessageHub : Hub
    {
        public MessageHub()
        {
        }
	}

MessageControllerに戻り、SignalRサービスを注入します.
    private readonly ICapPublisher _publisher;
    private readonly IHubContext<MessageHub> _hubContext;
    public MessageController(ICapPublisher publisher,IHubContext<MessageHub> hubContext)
    {
        _publisher = publisher;
        _hubContext = hubContext;
    }

データの購読方法を変更します.
    [NonAction]
    [CapSubscribe(”TopicName“,Group =”GroupName“)]
    public void DataSubscribe(string message)
    {
        try
        {
            Logger.Info(message);
            //        
    		_hubContext.Clients.All.SendAsync("ReceiveData", message)
        }
        catch (Exception ex)
        {
            Logger.Error(ex.Message);
        }
    }

同様にDotNetCore.CAPのデータ配信サービスはSignalRハブクラスに注入され,データ配信が実現される.
   private readonly ICapPublisher _publisher;
        
   public MessageHub(ICapPublisher publisher)
   {
       _publisher = publisher;
   }

   public void PublishData(string message)
   {
       _publisher.Publish("TopicName", message);
   }

ここは実際にDotNetCoreにしか使えません.CAPの一部の機能は、ちょっと本業ではありませんが、この部分は確かに使いやすいので持ってきました.さらにDotNetCore.CAPとSignalRのサブスクリプション/パブリケーション機能は、サービスとして単独で使用でき、より複雑なビジネスと融合したメリットがあります.
このようにデータの購読とパブリケーションは閉ループを形成し,データの伝送チャネルが開通した.