在我的小工作中,我只使用相同的存储帐户AzureWebJobsDashboard
和AzureWebJobsStorage
配置。
但是当我们同样使用相同的连接字符串进行本地调试和发布作业时会发生什么?他们是以孤立的方式对待吗?或者他们有任何冲突问题吗?
我查看了已发布作业的blob,找到了azure-webjobs-dashboad/functions/instances
或azure-webjobs-dashboad/functions/recent/by-job-run/{jobname}
或azure-webjobs-hosts/output-logs
目录;他们没有在作业中指定的鉴别器,而其他一些目录的GUID具有作业名称。
请注意,我的工作将连续投放。
答案 0 :(得分:0)
他们是否有任何冲突问题?
不,没有冲突问题。根据我的经验,当发布的作业在具有相同连接字符串的azure中运行时,不建议本地调试。以Azure存储队列为例,我们无法控制应在本地或天蓝色中执行哪个队列。如果我们尝试在本地使用调试,请尝试停止从Azure门户继续WebJob。
如果我们试图知道WebJob是从哪个实例执行的,我们可以使用环境变量WEBSITE_INSTANCE_ID
在代码中记录实例信息。以下是代码示例:
public static void ProcessQueueMessage([QueueTrigger("queue")] string message, TextWriter log)
{
string instance = Environment.GetEnvironmentVariable("WEBSITE_INSTANCE_ID");
string newMsg = $"WEBSITE_INSTANCE_ID:{instance}, timestamp:{DateTime.Now}, Message:{message}";
log.WriteLine(newMsg);
Console.WriteLine(newMsg);
}
更多信息请参阅how to use azure queue storage with the WebJob SDK。以下内容将从文档中删除。
如果您的Web应用程序在多个实例上运行,则在每台计算机上运行连续的WebJob,并且每台计算机将等待触发器并尝试运行功能。 WebJobs SDK队列触发器自动阻止函数多次处理队列消息;函数不必写成幂等的
更新:
关于计时器触发器我们可以从GitHub document找到WebJob中定时器触发器的更多解释。所以如果你想在本地调试,请尝试从天蓝色门户网站停止WebJob。
只有特定计时器功能的单个实例将在所有实例上运行(您不希望多个实例处理相同的计时器事件)。