1

在 Azure 中交换部署槽时,Web 作业是否会重新启动?如果是这样,它们是否使用目标配置或源配置值重新启动?

就我而言,我不希望 Web 作业在暂存槽中运行。为了解决这个问题,我有以下代码:

public static void Main()
{
    // Only run web jobs when configured
    bool enableWebJobs = false;
    bool.TryParse(ConfigurationManager.AppSettings["EnableWebJobs"], out enableWebJobs);

    if (enableWebJobs)
    {
        var host = new JobHost();
        host.RunAndBlock();
    }
    else
    {
        // Sleep so the Azure web jobs platform doesn't try to continually restart the process
        while (true)
        {
            Thread.Sleep(60000);
        }
    }
}

我只是不确定在使用正确的 AppSettings 交换后是否会重新启动网络作业。如果没有,那么这根本不起作用,因为 EnableWebJobs 将保持为 false。

4

1 回答 1

3

配置也被交换了,所以你的代码不会像你希望的那样工作。

使用 Amit Apple 的帖子 如何防止 Azure webjobs 在 Azure 网站生产中被交换 <--> staging slot

要防止 WebJobs 在暂存槽上运行,您可以添加一个名为 WEBJOBS_STOPPED 的应用设置并将其设置为 1(在 azure 门户中)

我已使用此粘性插槽设置在暂存时禁用 webjobs。

查看 Kudu 面板中的 webjobs 日志,webjobs 会在应用程序部署时启动,并且不受实际交换的影响(AFAIK 只是路由到新的 live/stage 的负载均衡器)。

编辑:我错了。作为交换的一部分,重新​​启动。(请参阅了解站点交换)即:

当您将源槽(我们称之为“暂存”)交换到目标槽(生产)时,会发生以下情况。

  1. 首先,Staging 站点需要对标记为“slot”的应用程序设置和连接字符串进行一些设置更改。还可能需要应用与源代码控制相关的其他更改。这会导致暂存站点重新启动,这很好。

  2. 接下来,Staging 站点通过将请求发送到其根路径(即'/')并等待它完成来预热。

  3. 现在暂存站点是温暖的,它被交换到生产中。没有停机时间,因为它直接从一个温暖的站点到另一个站点。

  4. 最后,曾经是 Production 而现在是 Staging 的站点也需要应用一些设置,导致它重新启动。同样,这很好,因为它发生在临时站点中。

于 2015-08-22T08:07:27.697 回答