首页 文章

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

提问于
浏览
2

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

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

该网站将这样工作 .

情景A.

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

方案B.

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

在下面说明:
Diagram

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

我需要:

web role => worker A worker = = web role wcf role => worker B worker B => web role

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

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

2 回答

  • 5

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

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

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

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

    这最终工作得很好,没有任何问题,实现起来很简单 . 如果我遇到任何问题,我会更新 .

    编辑#1:

    不要使用这种方法!一切都运作良好,直到你真正将它部署到一个现场环境,然后你得到一些问题,让我想把我的头发撕掉 .

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

    编辑#2:

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

  • 1

    实际上,要实现这种方法,您需要切换到IaaS VM上托管的Web角色或IIS .

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

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

相关问题