我已经搜索了很多,并认为我找到了解决问题的方法,但是没有用。
我在Azure中将一个Webjob部署到DEV / QA / UAT / Staging插槽。 QA / UAT插槽中的webjob都在同一服务总线触发器上触发,即使我手动将UAT插槽tigger命名为不同。看来它仍在触发“质量检查”插槽并使用“质量检查” Web应用程序配置应用程序设置。
QA ServiceBusTrigger QA ServiceBusTrigger
UAT ServiceBusTrigger UAT ServiceBusTrigger manually name and deployed
我在QA和UAT Azure应用设置中分别设置了服务总线队列名称。我已经将队列名称添加到webjob的日志记录中,即使我使用硬编码字符串设置了uat ServiceBusTrigger,也总是使用QA插槽设置。
QA代码似乎在UAT插槽上有锁,我不知道如何解锁它。两个webjob都在QA服务总线上处理消息,我不希望这样。我知道我可以使用WEBJOBS_STOPPED = 1禁用uat webjob,它确实可以工作并关闭webjob。
我还尝试了设置MaxConcurrentCalls = 1的消息选项,两个插槽似乎都在处理消息,或者至少在webjob仪表板中它们都记录相同的工作。
我不明白为什么UAT网络作业似乎附加到了质量检查配置设置中。奇怪的是,Web作业将数据发送到在门户网站的Azure应用程序设置中配置的URL。 UAT和QA插槽都使用QA应用程序设置,因为UAT Web作业记录URL,并且它是QA URL而不是UAT URL。但是,如果我在UAT应用程序设置上设置了WEBJOBS_STOPPED,则它确实会生效!如何从QA插槽读取URL,但如何从UAT插槽读取WEBJOBS_STOPPED设置?我仔细检查了这些设置,我知道UAT设置指向UAT端点,而不是质量检查。
我阅读了有关在启动时设置主机ID的讨论。我还为QA和UAT webjob设置了不同的主机ID,让QA插槽在CI上构建并手动部署了UAT代码,但是它并没有改变行为。
我已经阅读了有关Webjobs和许多留言板的MSDN文章。我似乎找不到任何与主机无关的设置,除了hostid的设置。 将不胜感激。
更新添加一些配置信息
Web作业在Azure应用程序(在本例中为API)的内存空间下运行。
质量检查API 在QA Azure应用设置中,将ServiceBusTrigger队列名称定义为变量: 队列名 Web作业使用HTTP客户端将消息发送到端点。在质量检查中,这也在Azure应用设置中设置为 http://endpoint-qa/ ....
UAT API ServicebusTrigger队列名称在Webjob中是硬编码的: 队列名称 Web作业使用HTTP客户端将消息发送到端点。在UAT中,这也在Azure应用设置中设置为 http://endpoint-uat/ ....
两个队列都连接到我们的质量检查存储,并且质量检查和UAT Web作业都为不同的队列配置,但使用的是相同的存储。
将消息发送到服务总线时,两个Web作业都会拾取并处理该消息,至少当他们并排观察Webjob仪表板进行质量检查和检查时,它们都将消息和出站数据包都记录到上述端点。 UAT,您可以清楚地看到它们都从队列中接收消息,即使UAT Web作业应该在侦听其他队列,即IE queuenameuat而不是queuename。
QA and UAT webjob dashboard side by side
似乎在QA和UAT插槽中运行的Web作业实际上是相同的代码,并且Im部署到UAT的代码实际上并未运行。由于webjob应该在应用程序的内存空间下运行,因此我不知道这种情况是如何发生的。我认为webjob使用项目名称空间的标准hostid约定在队列上锁定,但是我已在uat插槽中显式设置了hostid值,使其不同,但是似乎没有运行其自己的webjob实例。
这不是个人应用程序,因此我无法发布配置文件而不会使几乎所有内容都消失。感谢任何帮助。
谢谢。