我使用Azure应用程序服务计划托管web应用程序,该应用程序处理服务总线主题消息。我正在使用Azure函数应用程序,它也有http触发器来执行事件网格数据。Web ()和Function ()都有生产中的暂存槽。
在交换插槽的时候,我观察到,把stgaing槽换成web应用程序正在处理消息。这是预期的行为吗?对于功能应用程序暂存槽,我没有观察到这种行为。为什么会这样?
发布于 2021-03-25 18:56:42
在每个名为"IsStaging“的插槽中添加一个应用程序设置,其值为真值和假值,然后当应用服务升温时(启动或方法消耗消息)停止请求,这样就不会从暂存槽中使用消息。
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
}发布于 2021-03-25 16:04:49
请确保停止插槽,否则它将处于运行状态(可以接收消息)。如果你不想让它收到信息,你应该停止它。
https://stackoverflow.com/questions/66801456
复制相似问题