我正在Service Fabric中开发一个应用程序,它使用自托管SignalR(通过OWIN)向客户端发送实时数据。
在我的微服务中,我有一个无状态服务(S1),它从Pub / Sub代理接收数据,并将所述数据发送到通过SignalR连接的客户端。我使用this library在Service Fabric中实现Pub / Sub。我知道我可以使用Service Bus,RedisCache等作为Pub / Sub提供商,但我的团队决定尽量避免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服务器被禁用,Pub / Sub完美无缺。取消注释该行可使SignalR服务器和Pub / Sub停止工作。
任何人都可以帮助我理解为什么会这样吗?欢迎提出任何想法或建议。
答案 0 :(得分:0)
请先生成SubscriberCommunicationListener。该框架尚未提供目标通信监听器名称,因此使用了第一个。