首页 文章

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

提问于
浏览
5

我正在努力将SignalR体验集成到Azure基础架构中 .

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

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

当我在第一个队列中发布消息时,我将包括SignalR ConnectionId . 响应完成后,ConnectionId包含在响应消息中,这使我有机会进行呼叫 .

HubContext.Clients.Client(connectionId).AddItemsResult(response);

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

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

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

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

1 回答

  • 0

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

    以下是Scheduler Agent Supervisor消息传递设计模式的一个很好的解释:

    Scheduler Agent Supervisor pattern

相关问题