从Web角色将配置应用于辅助角色实例

时间:2012-08-03 15:29:43

标签: azure azure-worker-roles azure-web-roles azure-configuration

美好的一天,

我想问一个概念问题,这个问题一直在撕裂我的脑海。可能这里没有正确或错误的答案,但我希望能更好地理解我的选择。

情况: 我有一个Windows Azure应用程序。它由一个Web角色和一个实例组成,一个工作角色包含两个实例。

主要关注工人角色。它实现了Quartz.NET调度程序,以执行从CRM系统获取信息的任务,从中创建一个表并上传到FTP服务器,比如每8小时一次。很简单,没什么特别的。

如果有人需要在8小时间隔之间运行,则Web角色用于手动触发作业。简单的用户界面,只需一个按钮。

但是,我希望有可能从Web角色更改辅助角色的某些配置选项。例如,目的地FTP服务器的凭证和作业的时间表,例如让它每小时运行而不是8小时。如果角色脱机,则配置不需要持久化。目前,配置是静态类中的一个。

如果我正在运行一个辅助角色实例,这似乎不是问题:例如,我将通过队列从Web角色发送消息并更改辅助角色中的一些静态变量。但令我困惑的是,消息队列只能由一个角色实例获取,而不能同时获取。所以我最终会在一个实例中每8小时运行一次,而在另一个实例中每小时运行一次。

有没有办法通知两个实例配置需要更改?

2 个答案:

答案 0 :(得分:1)

有几种方法可以实现这一目标。除了@Gaurav建议之外,让我提供两个:

  1. Windows Azure配置设置。如果将ftp服务器名称和时间间隔存储为配置设置,然后更改配置,则每个角色实例都可以捕获并处理RoleEnvironment.Changing事件,并根据新设置执行操作。
  2. 服务巴士酒吧/分站。您可以让每个角色实例订阅配置更改主题。然后,每当您进行更改时,将更改发布到主题,作为订阅者的每个实例都将收到消息并采取相应的行动。

答案 1 :(得分:0)

一种可能性是通过工作者角色实例而不是“GET”消息对消息执行“PEEK”。这样,消息将对所有实例保持可见。显然,在何时删除邮件会遇到挑战。其他替代方法是为每个工作者角色实例创建一个单独的队列(您可以命名队列,以便每个工作者角色实例实际上从该实例的队列中获取消息,例如,如果您的工作者角色实例是WorkerRole1_IN_0,WorkerRole1_IN_1,您可以命名你的队列,如workerrole1-in-0,worker-in-1等等)。只是大声思考:)