我正在使用 Azure 应用程序服务计划来托管处理服务总线主题消息的 Web 应用程序。 我正在使用 Azure Function App,它也具有 http 触发器来执行事件网格数据。 Web App(应用服务计划)和 Function App(Elastic Premium 计划)在生产中都有暂存槽。
在交换插槽时,我观察到 Web 应用程序的 stgaing 插槽正在处理消息。这是预期的行为吗? 对于功能应用程序暂存槽,我没有观察到这种行为。为什么会这样?
最佳答案
在每个插槽中添加一个名为“IsStaging”的应用程序设置,其中包含 true 和 false 值,然后当应用程序服务预热(启动或使用消息的方法)时停止请求,以便不会从 Staging 插槽消耗消息。
if (CurrentConfiguration.IsStaging)
{
logger.LogWarn("Staging slot cannot consume messages");
return;
}
WebJob 更新:
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
}
关于azure - Web App后台任务的暂存槽处理消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66801456/