自己ホスト型SignalR(OWIN経由)を使用してリアルタイムデータをクライアントに送信するサービスファブリックでアプリケーションを開発しています。Pub/SubとOWIN in Service Fabric
私のマイクロサービスの中には、Pub/Subブローカーからデータを受け取り、そのデータをSignalRを介して接続されたクライアントに送信するステートレスサービス(S1)が1つあります。私はthis libraryを使ってPub/Sub in Service Fabricを実装しています。私は、Pub/SubプロバイダとしてService Bus、RedisCacheなどを使用できることは承知していますが、私のチームはService Fabric以外のオプションを避けようとしました。
this exampleに続いて、私はS1を加入者として成功裏にセットアップすることができました。しかし、自己ホスト型SignalRサーバ用のコードを追加すると、S1はPub/Subからのデータ受信を停止します。私は、次のコードブロックまで誤差を狭めてきた
:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
// yield return new ServiceInstanceListener(serviceContext => new OwinCommunicationListener(Startup.ConfigureApp, serviceContext, ServiceEventSource.Current, "HttpEndpoint"));
yield return new ServiceInstanceListener(p => new SubscriberCommunicationListener(this, p), "StatelessSubscriberCommunicationListener");
yield return new ServiceInstanceListener(context => new FabricTransportServiceRemotingListener(context, this, new FabricTransportRemotingListenerSettings() { EndpointResourceName = "PubSubEndpoint" }), "StatelessFabricTransportServiceRemotingListener");
}
提示したように、SignalRサーバは無効になり、パブ/サブは完璧に動作します。この行のコメントを外すと、SignalRサーバーとPub/Sub停止機能が有効になります。
なぜこのようなことが起こるのか理解してもらえますか?どんなアイデアや提案も大歓迎です。
"RedditCache" - Freudian typo? – Mardoxx
@Mardoxxそれをキャッチしてくれてありがとう、それを修正しました。 –
まずSubscriberCommunicationListenerを生成できますか?フレームワークはターゲットに通信リスナー名を提供しないので、最初のものが使用されます。 – LoekD