【问题标题】:SignalR via Azure Service BusSignalR 通过 Azure 服务总线
【发布时间】:2017-10-07 05:30:53
【问题描述】:

在设置 SignalR 以使用 Azure 服务总线时,我一定遗漏了一些东西。我有我的应用服务(API - Web API 2)设置来运行 3 个常量实例(当前),在启动时,API 使用服务总线连接字符串并设置适当的主题前缀。

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

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

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

【问题讨论】:

  • 您使用的是哪个 nuget 包?本教程中的 nuget 包已弃用。您应该使用 Microsoft.AspNet.SignalR.ServiceBus
  • 最新的Microsoft.*.SignalR*,如果需要可以给出具体的,我回到我的电脑前。

标签: javascript c# azure signalr azureservicebus


【解决方案1】:

您的代码似乎是正确的,它应该为每个实例运行。

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

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

【讨论】:

  • 它们使用相同的主题名称,因为实例是自动缩放/精确副本。我在客户端上使用了正确的 URL 吗?
猜你喜欢
  • 2017-01-13
  • 2023-04-10
  • 2016-12-10
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多