Azure SignalR和用于角色间通信的背板

时间:2014-04-25 13:59:43

标签: azure signalr signalr-backplane

我目前在Azure网站上使用signalR,只有一个实例将数据推送到客户端。没问题。

我们将项目拆分为单独的web / worker和wcf角色,以便我们可以独立扩展它们。

网站会像这样工作。

情景A

用户将一些数据提交给Web角色,并将其放入为工作人员A准备好的服务总线队列中,向工作人员A发送一条消息,表明已经添加了一个新项目(以保存轮询)。当工作人员A处理它时,将消息发送回Web角色,然后推送给特定的客户端。

方案B

以wcf角色接收数据,并将其放入为工作人员B准备的不同服务总线队列中,wcf角色向工作人员B发送消息,表明已添加新项目以防空闲。当工作人员B处理它时,向Web角色发送消息并将其推送给特定客户端。

如下图所示: Diagram

我将为用户启用用于Web角色的signalR服务总线背板。我不确定的是如何让我的角色在彼此之间进行沟通。

我需要:

  

web role =>工人A

     

工人A =>网络角色

     

wcf role =>工人B

     

工人B =>网络角色

我是否在网络上创建集线器,工作者A和工作人员B都有服务总线主题?然后以某种方式与signalr .net客户端连接?如何确保它在没有公开公开的情况下发送到Web角色的所有实例?

出于某种原因,数百个客户端通过JavaScript连接到我的Web角色中心似乎很简单,但尝试连接一些内部的客户端,我无法理解它。

2 个答案:

答案 0 :(得分:5)

如果有人感兴趣...我最终做的是:

我在Web和Wcf角色上创建了集线器。 Web角色有一个连接,允许/ signalr和web和wcf角色的javascript代理在/ signalr-internal没有。

我使用Azure Service Bus作为背板,让它自动处理web和wcf集线器,无需额外的修补。

在signalR认证中,我探测了连接的来源(即内部端点或外部ssl端点和拒绝/允许基于此访问特定集线器。这使我可以使用.net信号器客户端我的工作人员自动连接/重新连接等

这最终很好地解决了没有问题,并且实施起来很简单。如果我遇到任何问题,我会更新。

编辑#1:

请勿使用此方法!一切都运作得很好,直到你真正将它部署到现场环境中,然后你会遇到许多问题让我想把头发撕掉。

我实际上最终做的事情(完全在现场工作)是使用服务总线主题并为听众创建订阅。这将创建TCP连接,并允许您的通信在内部保持100%,没有任何疯狂的传输或边界问题。

编辑#2:

自从这篇文章以来,事件中心被释放,我们切换了,从未回头。见最后评论

答案 1 :(得分:1)

Peter,实际上要使这种方法起作用,您需要切换到IaaS VM上托管的Web角色或IIS。

目前,网站不支持Azure虚拟网络,这是在Azure上实例之间启用专用网络互连的唯一方法。

您可以将虚拟机,Web和工作者角色添加到虚拟网络中,该网络应该为您提供所需的访问权限,而无需通过公共端点公开所有内容。