C# 如何制作连续的WebJob?
我创建了一个Azure WebJob,如下面的脚本所示,它将一个项目从Azure存储队列中出列,然后将其存储到Azure表中。进程在1或2秒内完成运行,但在一分钟内只运行几次(有时在大约10分钟内停止)。总的来说,它不起作用 我错过了什么?也许我混合了触发作业和连续作业,但很难找到合适的样本C# 如何制作连续的WebJob?,c#,azure,azure-webjobs,C#,Azure,Azure Webjobs,我创建了一个Azure WebJob,如下面的脚本所示,它将一个项目从Azure存储队列中出列,然后将其存储到Azure表中。进程在1或2秒内完成运行,但在一分钟内只运行几次(有时在大约10分钟内停止)。总的来说,它不起作用 我错过了什么?也许我混合了触发作业和连续作业,但很难找到合适的样本 class Program { static void Main(string[] args) { Console.WriteLine("started at {0}", D
class Program
{
static void Main(string[] args)
{
Console.WriteLine("started at {0}", DateTime.Now.ToString("s"));
// Continuous job should have infinite loop.
while(true){
var host = new JobHost();
host.RunAndBlock();
}
}
public static void ProcessQueueMessage([QueueInput("blogqueue")] string json)
{
var storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings ["StorageConnectionString"].ConnectionString);
var tableClient = storageAccount.CreateCloudTableClient();
// Store it to Azure Table Storage
// omitted...
Console.WriteLine("Received JSON: {0}", json);
}
几点意见:
while(true)
语句RunAndBlock
内部已经有一个while循环,它将在那里阻塞public static void ProcessQueueMessage([QueueInput("blogqueue")] string json, CloudStorageAccount)
{
...
}
这是一个猜测,但从您的代码来看,存储连接字符串似乎存储在配置文件的
StorageConnectionString
中。JobHost
希望(1)运行时的连接字符串和数据存储在AzureJobsData
和AzureJobsRuntime
(如上所述)中,或者(2)将连接字符串作为参数传递给JobHost
构造函数。我认为这就是崩溃的原因。要使连续的WebJob正常工作,您需要在网站的“配置”选项卡中启用“始终打开”
“始终打开”功能仅适用于基本/标准网站计划,如果未启用该功能,您的WebJob可能会在一段时间后关闭。只需在ProjectName/Properties/WebJob-publish-settings.json中更改发布设置即可
"runMode": "OnDemand" => "runMode": "Continuous"
谢谢,我有一个问题,绑定方法(ProcessQueueMessage)是否在触发模式下执行?我的意思是,“队列项目到达时持续触发”或“Azure自己的WebJob调度程序周期持续检查新项目”?My Azure Storage Explorer显示出队列计数越来越高,但未从队列中删除,尽管该过程已成功。由于Main方法和binded方法没有concreate关系,因此很难猜测流程。如果在“RunAndBlock”场景中使用上述作业,则作业必须是连续的。这意味着,该进程将一直运行,并且它将定期(每隔几秒钟)轮询指定的Azure queueI已将WebJob更改为WorkerRole,因为WebJob的执行频率似乎较低(可能约1~2秒?)。我希望它有很高的频率(大约0~10ms)。WebJob可以以0~10ms的执行频率运行吗?WebJob和WebJobs SDK是两种不同的东西,你不需要一种来让另一种工作,因此如果你编写作业(使用.NET、javascript或其他语言)来频繁执行,它就会运行。如果它被部署到kubernetes呢?