阻止azure暂存环境访问队列消息



在将最新的azure部署从暂存交换到生产之后,我需要防止暂存工作者角色访问队列消息。我可以通过检测代码中的环境是暂存还是生产来做到这一点,但有人能告诉我是否有其他方法可以阻止暂存环境访问和处理队列消息吗??

谢谢你的帮助!Mahesh

平台中没有任何东西可以做到这一点。这是一个应用程序/代码。如果应用程序具有访问队列的凭据(例如,帐户名和密钥),则它正在执行编码时要执行的操作。

让您的暂存环境使用主存储密钥,让您的生产环境使用辅助存储密钥。进行VIP交换时,您可以重新生成当前暂存环境正在使用的存储密钥,这将导致它不再具有访问队列的凭据。

请注意,这确实引入了一个时间问题。如果您先进行交换,然后更改存储密钥,则会存在工作角色在两个操作之间拾取消息的风险。如果您先更改密钥,然后进行交换,那么在一两秒钟内,生产服务将不再从队列中提取消息。这将取决于您的服务,以及您是否接受这个时间问题。

您实际上可以检测当前实例运行在哪个部署槽中。我在这里详细介绍了如何做到这一点:https://stackoverflow.com/a/18138700/1424115

这确实没有应该的那么容易,但这绝对是可能的。

如果这是一个保护您的DEV/TEST环境免受生产环境影响的问题,您可能需要考虑单独的Azure订阅(每个环境一个)。这本来自PatternsandPractices的指南介绍了这种方法的优点。

http://msdn.microsoft.com/en-us/library/ff803371.aspx#sec29

kwill关于重新生成密钥的回答很好,但我最终做到了:

  1. 可选-通过更改适当的配置密钥来阻止生产工人角色侦听队列,该密钥告诉生产工人角色忽略消息,然后重新启动虚拟机(通过管理门户或终止WaHostBootstrapper.exe)

  2. 发布到暂存环境(这将开始访问队列,在我们的情况下这很好)

  3. 交换阶段<->通过Azure 进行生产

  4. 再次发布,这次到新的舞台环境(旧的现场)

现在,生产和临时工作人员角色都在运行最新版本并为队列提供服务。这对我们来说是一件好事,因为它给了我们两倍的容量,而且由于登台无论如何都在运行,我们不妨使用它!

重要的是,您只能将暂存作为一种实时发布方法(正如预期的那样)——为测试/QA目的创建一个全新的环境,它有自己的存储帐户和消息队列。

最新更新