将最新的 azure 部署从暂存切换到生产后,我需要防止暂存辅助角色访问队列消息。我可以通过检测环境是否在代码中暂存或生产来做到这一点,但是谁能告诉我是否有任何其他方法可以防止暂存环境访问和处理队列消息?
谢谢您的帮助!马赫什
将最新的 azure 部署从暂存切换到生产后,我需要防止暂存辅助角色访问队列消息。我可以通过检测环境是否在代码中暂存或生产来做到这一点,但是谁能告诉我是否有任何其他方法可以防止暂存环境访问和处理队列消息?
谢谢您的帮助!马赫什
平台中没有任何东西可以做到这一点。这是一个应用程序/代码的事情。如果应用程序具有访问队列的凭据(例如,帐户名和密钥),那么它正在执行它被编码的操作。
让您的登台环境使用主存储密钥,而您的生产环境使用辅助存储密钥。当您进行 VIP 交换时,您可以重新生成您现在的暂存环境正在使用的存储密钥,这将导致它不再具有访问队列的凭据。
请注意,这确实引入了时间问题。如果您先进行交换然后更改存储密钥,那么您将面临工作角色在两个操作之间拾取消息的风险。如果您先更改密钥然后进行交换,那么您的生产服务将在一两秒钟内不再从队列中提取消息。这取决于您的服务是否可以接受此时间问题。
您实际上可以检测当前实例在哪个部署槽中运行。我在这里详细介绍了如何执行此操作:https ://stackoverflow.com/a/18138700/1424115
这确实不像应该的那么容易,但绝对有可能。
如果这是一个保护您的 DEV/TEST 环境免受 PRODUCTION 环境影响的问题,您可能需要考虑单独的 Azure 订阅(每个环境一个订阅)。来自 Patterns and Practices 的本指南讨论了这种方法的优点。
kwill 的重新生成密钥的答案是一个很好的答案,但我最终这样做了:
可选 - 通过更改告诉它忽略消息的适当配置键,然后重新启动 VM(通过管理门户或终止 WaHostBootstrapper.exe),停止生产工作人员角色侦听队列
发布到暂存环境(这将开始访问队列,这在我们的例子中很好)
通过 Azure 交换分阶段 <-> 生产
再次发布,这次是到新的分阶段环境(旧现场)
您现在拥有运行最新版本并为队列提供服务的生产和登台工作人员角色。这对我们来说是一件好事,因为它为我们提供了两倍的容量,而且由于暂存正在运行,我们不妨使用它!
重要的是,您只使用暂存作为发布的一种方法(如预期的那样) - 为测试/QA 目的创建一个全新的环境,它有自己的存储帐户和消息队列。