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