1

我有以下消息传输​​方案

客户端 -> 调用 SignalR -> 调用 NServiceBus -> 内部处理消息 -> 使用结果调用 NServiceBus 网关服务 -> 调用 SignalR 集线器 -> 使用结果更新客户端。

在选择是否使用 SignalR 与长轮询时,我需要知道 SignalR 是否可扩展。所以在做作业时,我在 Azure 服务总线上遇到了 SignalR。设置在 Global.asax 应用程序启动时完成。

最终,我需要能够从 NServiceBus 处理程序内部执行此操作:

        var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
        context.Clients.Group(group).addMessage(message);

问题是上下文是否会被提升,因为我(可能)从另一台机器而不是客户端连接的机器调用它?

另外,SignalR 实现用来播种主题的分片模式是什么?我知道我可以将其配置为使用 N 个主题,但它实际上如何确定哪些消息转到哪些主题以及它是否与外部调用者 PoV 相关。

4

1 回答 1

1

您应该能够在您通过 SignalR注册为您GlobalHost.ConnectionManager.GetHubContext的任何应用程序中使用。如果您在应用程序中调用,这将为您完成。ServiceBusMessageBusIMessageBusGlobalHost.DepenencyResolverGlobalHost.DepenencyResolver.UseServiceBus(...)

如果执行此操作,则每次调用或返回 fromaddMessage的任何其他集线器方法都会向 Azure 服务总线发布一条消息。如果有订阅的客户端连接到网络场中的其他节点,其他节点将从服务总线中获取消息并将其中继给订阅的客户端。IHubContextGetHubContext

消息去往哪个主题不应该与外部调用者的 PoV 相关。您可以使用多个主题来提高吞吐量,但对于大多数用例来说,一个主题就足够了。

如果您选择使用多个主题,则可以将消息转到的主题视为本质上是随机的。唯一可以保证的是来自同一发件人的消息将转到同一主题。这允许 SignalR 按顺序保持来自同一发件人的消息。

警告购买者: SignalR 尚未发布支持横向扩展的官方版本。1.1 版本将是第一个正式支持横向扩展的版本。

于 2013-03-26T18:23:44.140 回答