每个Web服务器的Azure Service Bus主题订阅

时间:2015-08-11 00:43:50

标签: asp.net azure signalr azureservicebus

我正致力于将SignalR体验集成到Azure基础架构中。

基本上,用户会在网站上采取一些操作,触发Web服务器上的函数调用(通过SignalR)。处理该请求可能需要一些时间,用户可以通过单击发送数十个或数百个请求。我正在创建一个Service Bus队列,将这些任务发送给WebJob / Worker来处理它们,一旦它们准备好,它们就会将它发送回另一个队列(响应队列)。

也就是说,为了提供令人敬畏的用户体验,如果用户仍然和以前一样处于同一页面,并且处理准备就绪,我希望它能够在完成这些任务时实时更新它们。如果用户被固定到一个前端盒(由于SignalR WebSocket连接),这应该是微不足道的,但它们不是,所以不同的前端可能需要处理该响应消息并通过SignalR调用浏览器。

当我在第一个队列中发布消息时,我包括SignalR ConnectionId。当响应完成时,ConnectionId包含在响应消息中,这使我有机会打电话。

<cfcomponent>
    <cffunction name="test" access="remote" output="true">
        <cfoutput>#now()#</cfoutput>
    </cffunction>
</cfcomponent>

我的问题是关于服务总线主题 - 或者我还没有完全理解的其他解决方案。我需要通知每个WebServer处理每个响应,因为我无法确定哪个Web服务器实际上会将SignalR调用到客户端。

1)服务总线主题是正确的方法吗?

2)我需要动态地创建N个订阅(每个Web服务器一个),这似乎很奇怪。如果服务器死了又永远不会回来会怎么样?我订阅了没有订阅者了吗?

基本上,我只是想创建一个简单的发布者 - 订阅者模式,在这里我可以拥有N个动态订阅者(听众)。

1 个答案:

答案 0 :(得分:0)

您将需要实现某种状态存储,该状态存储在为每个用户请求完成处理后会更新。然后,让客户端定期轮询以获取该使用请求的状态存储的最新状态。另外,您将需要维护该状态存储,以便用户可以知道他们的请求是否已在多个用户/客户端会话之间完成处理。 Scheduler Agent Supervisor消息传递设计模式应该可以帮助您实现要构建的内容。

这是对Scheduler Agent Supervisor消息传递设计模式的很好解释:

Scheduler Agent Supervisor pattern