Azure信号机和背板,用于角色间通信

Azure信号机和背板,用于角色间通信,azure,signalr,signalr-backplane,Azure,Signalr,Signalr Backplane,我目前正在Azure网站上使用signalR,通过一个实例将数据推送到客户端。没问题 我们将项目分为单独的web/worker和wcf角色,这样我们就可以独立地扩展它们 该网站将这样工作 情景A 用户向web角色提交一些数据,并将其放入服务总线队列中,为工作人员a做好准备,向工作人员a发送一条消息,说明已添加一个新项,以防其空闲(以保存轮询)。当worker A处理完它后,会将一条消息发送回web角色,并将其推送到特定的客户端 情景B 在wcf角色中接收数据,并将其放入另一个服务总线队列中,为辅

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

我们将项目分为单独的web/worker和wcf角色,这样我们就可以独立地扩展它们

该网站将这样工作

情景A

用户向web角色提交一些数据,并将其放入服务总线队列中,为工作人员a做好准备,向工作人员a发送一条消息,说明已添加一个新项,以防其空闲(以保存轮询)。当worker A处理完它后,会将一条消息发送回web角色,并将其推送到特定的客户端

情景B

在wcf角色中接收数据,并将其放入另一个服务总线队列中,为辅助工B做好准备。wcf角色向辅助工B发送消息,表示已添加新项目,以防其空闲。当worker B处理完消息后,会向web角色发送一条消息,并将其推送到特定的客户端

如下图所示:

我将为用户启用web角色的signalR service bus背板。我不确定的是如何让我的角色相互交流

我需要:

web角色=>worker A

工作者A=>web角色

wcf角色=>worker B

工作者B=>web角色

我是否在web上创建集线器,worker A和worker B都有服务总线主题?然后以某种方式与signar.net客户端连接?如何确保它在不公开的情况下访问web角色的所有实例


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

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

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


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

如果有人感兴趣。。。我最后做的是:

我在Web和Wcf角色上创建了集线器。web角色的连接允许javascript代理位于/signer,而web和wcf角色的连接不允许位于/signer internal

我使用Azure服务总线作为背板,让它自动处理web和wcf集线器,而无需额外修补

在signalR身份验证中,我探测到连接来自何处(即内部端点或外部ssl端点),并基于此拒绝/允许访问特定集线器。这允许我在工作人员上使用自动连接/重新连接的.net signalR客户端等

到目前为止,它运行得很好,没有任何问题,实现起来也很简单。如果遇到任何问题,我会更新

编辑#1:

不要使用这种方法!在你真正将它部署到一个实时环境中之前,一切都会运行得非常出色,然后你会遇到一系列问题,让我非常恼火

实际上,我最终做的是使用服务总线主题,并为侦听器创建对它们的订阅。这创建了TCP连接,并允许您的通信在内部保持100%,而不会出现任何疯狂的传输或边界问题

编辑#2:


自从这篇文章发表后,事件集线器被发布了,我们切换了,再也没有回头看。见最后一条评论

嗨,Simon,我们已经切换到web、worker和wcf角色,如上图所示。今天我正在试验一些内部端点和信号器,完成后我将发布解决方案。你能更详细地描述你的问题吗s?它是使用服务总线作为背板吗?我们目前在生产中遇到了一大堆困难,服务总线背板支持10个web角色。这导致我们整个网站完全被锁定。我们现在已经转移到Redis背板,但仍在寻找有类似问题的人。我最终离开了using主题/订阅(我开始遇到吞吐量问题)。我现在几乎只使用事件中心,它们非常棒,更重要的是,客户端看起来坚如磐石,并且有很大的空间。如果您可以通过每个事件只放置256kb(或者将数据放在表存储中,并通过事件中心放置引用)来解决问题,请看一看。