2017-08-18 13 views
0

自己ホスト型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停止機能が有効になります。

なぜこのようなことが起こるのか理解してもらえますか?どんなアイデアや提案も大歓迎です。

+0

"RedditCache" - Freudian typo? – Mardoxx

+0

@Mardoxxそれをキャッチしてくれてありがとう、それを修正しました。 –

+0

まずSubscriberCommunicationListenerを生成できますか?フレームワークはターゲットに通信リスナー名を提供しないので、最初のものが使用されます。 – LoekD

答えて

0

最初にSubscriberCommunicationListenerを生成してください。フレームワークは、まだターゲットとする通信リスナー名を提供していないため、最初のものが使用されます。

関連する問題