用于 Web App 后台任务的暂存槽处理消息

Staging Slot processing messages for Web App background task

我正在使用 Azure App 服务计划来托管处理服务总线主题消息的 Web 应用程序。 我正在使用 Azure Function App,它也有 http 触发器来执行事件网格数据。 Web App(App Service Plan) 和 Function App(Elastic Premium plan) 在生产中都有暂存槽。

在交换插槽时,我观察到 Web 应用程序的 stgaing 插槽正在处理消息。这是预期的行为吗? 对于函数应用程序暂存槽,我没有观察到这种行为。为什么会这样?

请务必停止插槽,否则会处于运行状态(可以接收消息)。如果你不想让它接收信息,你应该停止它。

在每个槽中添加一个名为“IsStaging”的应用程序设置,其中包含 true 和 false 值,然后当应用服务预热时(启动或方法使用消息)停止请求,这样消息就不会从暂存槽中消耗。

                if (CurrentConfiguration.IsStaging)
                {
                   logger.LogWarn("Staging slot cannot consume messages");
                   return;
                }

网络作业更新

        static void Main(string[] args)
        {
            JobHost host = CreateJobHost();
            if (CurrentConfiguration.IsStaging)
            {
                host.Call(typeof(Program).GetMethod("DoStagingInfiniteLoop"));
            }
            else
            {
                host.Call(typeof(Program).GetMethod("ProcessQueue"));
            }
        }


        private static JobHost CreateJobHost()
        {
            JobHostConfiguration jobHostConfig = new JobHostConfiguration();
            jobHostConfig.DashboardConnectionString = "DashboardCS";
            jobHostConfig.StorageConnectionString = "StorageCS";

            var JobHost = new JobHost(jobHostConfig);
            return JobHost;
        }


        [NoAutomaticTrigger]
        public static void DoStagingInfiniteLoop(TextWriter logger, CancellationToken token)
        {
            const int LOOP_TRACE_INTERVAL = 10000;
            ProcessLogger.WriteTrace("This is a staging environment, waiting...");
            while (true)
            {
                Task.Delay(LOOP_TRACE_INTERVAL).Wait(token);
            }
        }

        [NoAutomaticTrigger]
        public static void ProcessQueue(TextWriter logger, CancellationToken token)
        {
            //Your processing code here
        }