从webfarm调用SignalR客户端

时间:2013-03-26 18:10:59

标签: c# .net signalr nservicebus azureservicebus

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

客户 - >呼叫SignalR - >调用NServiceBus - >内部处理消息 - >使用Result调用NServiceBus网关服务 - >呼叫SignalR Hub - >用结果更新客户端。

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

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

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

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

SignalR实现用于为主题设定种子的分片架构是什么?我知道我可以将其配置为使用N个主题,但它是如何确定哪个消息属于哪个主题以及它是否与外部呼叫者PoV相关。

1 个答案:

答案 0 :(得分:1)

您应该能够在已通过SignalR GlobalHost.ConnectionManager.GetHubContext注册ServiceBusMessageBus作为IMessageBus的任何应用中使用GlobalHost.DepenencyResolver。如果您在应用程序中调用GlobalHost.DepenencyResolver.UseServiceBus(...),则可以使用此功能。

如果执行此操作,则每次调用addMessageIHubContextGetHubContext返回的任何其他集线器方法都会向Azure Service Bus发布一条消息。如果订阅的客户端连接到Web场中的其他节点,则其他节点将从Service Bus接收消息并将其中继到订阅的客户端。

消息所涉及的主题与外部呼叫者的PoV无关。您可以使用多个主题来提高吞吐量,但对于大多数用例,一个就足够了。

如果您选择使用多个主题,则可以考虑消息所涉及的主题基本上是随机的。唯一可以保证的是来自同一发件人的邮件将转到同一主题。这允许SignalR按顺序保留来自同一发件人的邮件。

警告: SignalR还没有正式版本支持扩展。 1.1版本将是第一个支持正式扩展的版本。