Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microsoft Azure角色间通信_Azure_Asp.net Mvc 4_Queue_Azureservicebus - Fatal编程技术网

Microsoft Azure角色间通信

Microsoft Azure角色间通信,azure,asp.net-mvc-4,queue,azureservicebus,Azure,Asp.net Mvc 4,Queue,Azureservicebus,我想创建一个Azure应用程序,它执行以下操作: 用户将看到一个MVC4网站(web角色),其中显示命令列表 当用户选择一个命令时,它将广播给所有工作人员角色 工作角色处理任务、存储结果并通知web角色 Web角色显示工作人员角色的组合结果 据我所知,有两种方法可以做到这一点:WindowsAzure服务总线或使用队列。每个工作人员角色还将结果存储在数据库中 服务总线似乎更适合其发布/订阅模型,因此所有工作角色将获得相同的命令和大致相同的时间。不过,队列似乎更容易使用 在开发时,服务总线能否

我想创建一个Azure应用程序,它执行以下操作:

  • 用户将看到一个MVC4网站(web角色),其中显示命令列表
  • 当用户选择一个命令时,它将广播给所有工作人员角色
  • 工作角色处理任务、存储结果并通知web角色
  • Web角色显示工作人员角色的组合结果
据我所知,有两种方法可以做到这一点:WindowsAzure服务总线或使用队列。每个工作人员角色还将结果存储在数据库中

服务总线似乎更适合其发布/订阅模型,因此所有工作角色将获得相同的命令和大致相同的时间。不过,队列似乎更容易使用


在开发时,服务总线能否与仿真器一起在本地使用?我使用的是免费试用版,无法在开发过程中不断保留应用程序。另外,在使用队列时,如何通知web角色处理已完成

我同意。ServiceBus是满足此消息传递需求的更好选择。通过一些努力,您可以对队列执行同样的操作。但是,您将编写大量代码来实现ServiceBus已经提供给您的东西

ServiceBus没有像Azure Strorage服务(队列/表/Blob)那样的本地仿真器。但是,当角色在您的开发环境中本地运行时,您仍然可以使用ServiceBus在角色之间进行消息传递

关于通知web角色处理已完成的最后一个问题,这里有几种方法。只是一些想法(不是详尽的列表)

  • 表存储,其中web角色可以定期检查工作单元的状态
  • 已完成工作的另一个ServiceBus队列/主题
  • 内部端点。您必须有逻辑才能知道它是来自worker角色N的更新,还是表示所有worker角色的已完成工作单元

  • 我同意Rick的回答,但也要考虑以下几点:

    如果选择服务总线主题方法,则当每个工作人员角色联机时,需要生成对该主题的订阅。您需要考虑当其中一个工人出现故障并被回收时的订阅维护,或者考虑订阅可能存在的任何原因


    告诉web角色所有工作人员都已完成是很有趣的。Rick提供的选项很好,但您需要在这里考虑一些事情。这意味着web角色需要知道有多少工人在那里,或者其他一些机制来决定何时所有人都报告完成了。您可能会遇到五个工作者角色接收消息并开始工作的情况,然后其中一个角色开始反复失败处理。其他四个报告完成了,但现在网络角色正在等待第五个。你要等多久才能得到答复?你能继续吗?如果您只是告诉系统缩小规模,而web角色认为有5个,那么现在只有4个。这些都是您需要考虑的事情,它们都取决于您的需求。

    根据您的问题,您可以使用任一队列服务,并获得良好的结果。但是,它们中的每一个都将有不同的挑战和优势需要克服

    服务总线队列的一些优点是,它通过一个持久连接(最多100个连接)提供阻塞接收,它可以监视消息的完成情况,并且可以发送更大的消息(256KB)

    与服务总线解决方案相比,存储队列的一些优点是速度稍快(如果15毫秒对您来说很重要),您可以使用单个存储系统(因为您可能会使用存储来提供blob和表服务),并且可以进行简单的自动扩展。如果您需要根据负载自动缩放工作角色,那么通过存储队列传递请求会使自动缩放变得微不足道——您只需在Azure云服务UI的“缩放”选项卡下设置自动缩放

    以下是两种azure队列服务的更深入比较:

    另外,在使用队列时,如何通知web角色处理已完成

    对于Azure存储队列解决方案,我编写了一个库,可以提供帮助:。
    它提供了一个代理层,用于促进从web角色到工作者角色以及通过存储队列返回的RPC式通信

    谢谢你的意见。我尝试在一个小样本项目中使用服务总线,它成功了!再次感谢:)感谢这些有用的建议:)我意识到这已经是一个老问题了,但我很好奇为什么你有多个工作角色都对同一条信息做出反应?它们是否各自执行不同的任务(基于该消息)?我试图创建一个在现有web应用程序上生成大量负载的应用程序。因此,我使用worker角色同时发送http请求,使用web角色启动负载测试