SignalR通过Azure Service Bus

时间:2017-05-09 03:48:57

标签: javascript c# azure signalr azureservicebus

设置SignalR以使用Azure Service Bus时,我必须遗漏一些东西。我有我的App Service(API - Web API 2)设置来运行3个常量实例(当前),启动时,API使用Service Bus连接字符串并设置适当的主题前缀。

在前端,SignalR能够连接到我的API,但有时只有客户端才会收到消息。我的假设是客户端只接收来自它最初连接的服务器的消息。这让我相信SignalR没有正确使用服务总线。通过Azure查看服务总线时,我确实看到正在创建主题,但其中没有任何消息(我也看到订阅)。

因此,据我所知,客户端和服务器之间的SignalR仍然使用直接连接而不是通过服务总线。请注意客户端正在使用用于SignalR连接的API的URL - 这是正确的吗?

SignalRConfig (在应用启动期间。)

var serviceBusConnectionString = configHelper.SignalR.ServiceBusConnectionString;
var serviceBusTopicPrefix = configHelper.SignalR.TopicPrefix;

Logger.Info("SignalR: configuring");

// Use the service bus, if specified.
if (serviceBusConnectionString != null && serviceBusTopicPrefix != null) {
    Logger.Info("SignalR: using service bus");

    GlobalHost.DependencyResolver.UseServiceBus(serviceBusConnectionString, serviceBusTopicPrefix);
}

app.MapSignalR();

以上代码针对每个实例运行,我不知道这是否正确。也许这就是我看到多个主题的原因,例如signalr_topic_my-app-staging_0 - 0到5.

请注意,我已尝试按照此(过时的)教程进行操作:https://docs.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-with-windows-azure-service-bus

1 个答案:

答案 0 :(得分:0)

您的代码似乎正确,应该针对每个实例运行。

Service Bus中应该有6个主题:signalr_topic_ {TOPIC_PREFIX} _0到signalr_topic_ {TOPIC_PREFIX} _5。

每个实例是否使用相同的主题前缀名称?如果他们使用不同的主题名称,那么这将解释您所看到的行为。