0

再会,

我想问一个让我心烦意乱的概念性问题。这里可能没有正确或错误的答案,但我希望能更好地理解我的选择。

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

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

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

但是,我希望有可能从 Web 角色更改辅助角色的一些配置选项。例如,目标 FTP 服务器的凭据和作业计划,例如使其每小时运行一次,而不是 8 小时。如果角色脱机,则不需要保留配置。目前 config 是静态类中的一个。

如果我正在运行一个工作角色实例,这似乎不是问题:例如,我将通过队列从 Web 角色发送一条消息并更改工作角色中的一些静态变量。但是让我感到困惑的是消息队列只能由一个角色实例拾取,而不是同时被两个角色实例拾取。因此,我最终将在一个实例中每 8 小时运行一次作业,在另一个实例中每小时运行一次。

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

4

2 回答 2

1

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

  1. Windows Azure 配置设置。如果您将 ftp 服务器名称和时间间隔存储为配置设置,然后更改配置,则每个角色实例都可以捕获和处理RoleEnvironment.Changing事件,并根据新设置采取行动。
  2. 服务总线发布/订阅。您可以让每个角色实例订阅配置更改主题。然后,每当您有更改时,将更改发布到主题,作为订阅者的每个实例都将收到消息并采取相应的行动。
于 2012-08-03T17:01:48.953 回答
0

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

于 2012-08-03T16:47:42.470 回答