Microsoft Azure角色间通信
我想创建一个Azure应用程序,它执行以下操作:Microsoft Azure角色间通信,azure,asp.net-mvc-4,queue,azureservicebus,Azure,Asp.net Mvc 4,Queue,Azureservicebus,我想创建一个Azure应用程序,它执行以下操作: 用户将看到一个MVC4网站(web角色),其中显示命令列表 当用户选择一个命令时,它将广播给所有工作人员角色 工作角色处理任务、存储结果并通知web角色 Web角色显示工作人员角色的组合结果 据我所知,有两种方法可以做到这一点:WindowsAzure服务总线或使用队列。每个工作人员角色还将结果存储在数据库中 服务总线似乎更适合其发布/订阅模型,因此所有工作角色将获得相同的命令和大致相同的时间。不过,队列似乎更容易使用 在开发时,服务总线能否
- 用户将看到一个MVC4网站(web角色),其中显示命令列表
- 当用户选择一个命令时,它将广播给所有工作人员角色
- 工作角色处理任务、存储结果并通知web角色
- Web角色显示工作人员角色的组合结果
在开发时,服务总线能否与仿真器一起在本地使用?我使用的是免费试用版,无法在开发过程中不断保留应用程序。另外,在使用队列时,如何通知web角色处理已完成 我同意。ServiceBus是满足此消息传递需求的更好选择。通过一些努力,您可以对队列执行同样的操作。但是,您将编写大量代码来实现ServiceBus已经提供给您的东西 ServiceBus没有像Azure Strorage服务(队列/表/Blob)那样的本地仿真器。但是,当角色在您的开发环境中本地运行时,您仍然可以使用ServiceBus在角色之间进行消息传递 关于通知web角色处理已完成的最后一个问题,这里有几种方法。只是一些想法(不是详尽的列表)
我同意Rick的回答,但也要考虑以下几点: 如果选择服务总线主题方法,则当每个工作人员角色联机时,需要生成对该主题的订阅。您需要考虑当其中一个工人出现故障并被回收时的订阅维护,或者考虑订阅可能存在的任何原因
告诉web角色所有工作人员都已完成是很有趣的。Rick提供的选项很好,但您需要在这里考虑一些事情。这意味着web角色需要知道有多少工人在那里,或者其他一些机制来决定何时所有人都报告完成了。您可能会遇到五个工作者角色接收消息并开始工作的情况,然后其中一个角色开始反复失败处理。其他四个报告完成了,但现在网络角色正在等待第五个。你要等多久才能得到答复?你能继续吗?如果您只是告诉系统缩小规模,而web角色认为有5个,那么现在只有4个。这些都是您需要考虑的事情,它们都取决于您的需求。根据您的问题,您可以使用任一队列服务,并获得良好的结果。但是,它们中的每一个都将有不同的挑战和优势需要克服 服务总线队列的一些优点是,它通过一个持久连接(最多100个连接)提供阻塞接收,它可以监视消息的完成情况,并且可以发送更大的消息(256KB) 与服务总线解决方案相比,存储队列的一些优点是速度稍快(如果15毫秒对您来说很重要),您可以使用单个存储系统(因为您可能会使用存储来提供blob和表服务),并且可以进行简单的自动扩展。如果您需要根据负载自动缩放工作角色,那么通过存储队列传递请求会使自动缩放变得微不足道——您只需在Azure云服务UI的“缩放”选项卡下设置自动缩放 以下是两种azure队列服务的更深入比较: 另外,在使用队列时,如何通知web角色处理已完成 对于Azure存储队列解决方案,我编写了一个库,可以提供帮助:。
它提供了一个代理层,用于促进从web角色到工作者角色以及通过存储队列返回的RPC式通信 谢谢你的意见。我尝试在一个小样本项目中使用服务总线,它成功了!再次感谢:)感谢这些有用的建议:)我意识到这已经是一个老问题了,但我很好奇为什么你有多个工作角色都对同一条信息做出反应?它们是否各自执行不同的任务(基于该消息)?我试图创建一个在现有web应用程序上生成大量负载的应用程序。因此,我使用worker角色同时发送http请求,使用web角色启动负载测试