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を接続することを担当する.
Nugetマネージャを使用するASP.NET CoreプロジェクトはDotNetCoreをインストールする.CAP.KafkaとDotNetCore.CAP.MySql、コアライブラリDotNetCoreを含む.CAP.
スタートを切るcsファイルを構成します.コンフィギュレーション・サービス・メソッドに、コード構成データベースおよびメッセージ・キュー接続文字列を追加します.
コンフィギュレーションメソッドにコードを追加してデータパネルを有効にします.
新しいASP.NET Core MVCコントローラMessageController,DotNetCoreに注入する.CAPのパブリケーションサービスは、Attributeプロパティとしてデータの購読方法を定義します.
NuGetマネージャを使用するASP.NET CoreプロジェクトはMicrosoftをインストールします.AspNetCore.SignalR.
スタートを切るcsファイルを構成します.
コンフィギュレーションサービスメソッドにコード設定SignalR基本構成を追加します.
Configureメソッドでハブルーティングを構成します.
新しいハブクラスMessageHubは、Microsoftから継承されます.AspNetCore.SignalR.Hub.
MessageControllerに戻り、SignalRサービスを注入します.
データの購読方法を変更します.
同様にDotNetCore.CAPのデータ配信サービスはSignalRハブクラスに注入され,データ配信が実現される.
ここは実際にDotNetCoreにしか使えません.CAPの一部の機能は、ちょっと本業ではありませんが、この部分は確かに使いやすいので持ってきました.さらにDotNetCore.CAPとSignalRのサブスクリプション/パブリケーション機能は、サービスとして単独で使用でき、より複雑なビジネスと融合したメリットがあります.
このようにデータの購読とパブリケーションは閉ループを形成し,データの伝送チャネルが開通した.
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のサブスクリプション/パブリケーション機能は、サービスとして単独で使用でき、より複雑なビジネスと融合したメリットがあります.
このようにデータの購読とパブリケーションは閉ループを形成し,データの伝送チャネルが開通した.