我使用下一代码设置azure webjob:
的Program.cs:
public class Program {
static void Main(){
JobHostConfiguration config = new JobHostConfiguration();
config.Tracing.ConsoleLevel = TraceLevel.Verbose;
config.Queues.BatchSize = 1;
config.UseTimers();
config.Queues.MaxDequeueCount = 1;
config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(3);
ServiceBusConfiguration sbConfig = new ServiceBusConfiguration();
sbConfig.MessageOptions = new OnMessageOptions
{
MaxConcurrentCalls = 5,
AutoRenewTimeout = TimeSpan.FromMinutes(10),
AutoComplete = true
};
config.UseServiceBus(sbConfig);
config.NameResolver = new QueueNameResolver();
var host = new JobHost(config);
host.RunAndBlock();
}
public class QueueNameResolver : INameResolver
{
public string Resolve(string name)
{
return ConfigurationManager.AppSettings[name];
}
}
}
Functions.cs
public static void ProcessQueueMessage([ServiceBusTrigger("%WebjobIncomingQueueName%")] ProcessingInfo processingInfo, TextWriter webjobTextWriter){
webjobTextWriter.WriteLine("Service Bus trigger started");
//long running task simulation
Thread.Sleep(400000);
}
App.config文件队列名称配置部分:
<appSettings>
<add key="WebjobIncomingQueueName" value="webjob-test" />
</appSettings>
ProcessingInfo类:
public class ProcessingInfo {
public long ID { get; set; }
}
此处的问题是,对于来自webjob-test
队列ProcessQueueMessage
的相同消息,在第一次出现后每分钟触发一次。根据回答here,应该可以使用OnMessageOptions.AutoRenewTimeout
轻松配置,但它似乎无法正常工作。有人可以帮忙解决这个问题吗?
答案 0 :(得分:0)
当您对已编译的消息说,那么将不会回到队列中 实施例
foreach($newData as $purchaseOrderCode => $row){
echo $purchaseOrderCode .' : ' . implode(',', $row['ship_product_code']);
}
查看link以获取更多信息
答案 1 :(得分:0)
当消息是毒药然后WebJob SDK不删除它时,可能会发生这种情况。
内容导致函数失败的消息称为poison 消息。当函数失败时,不会删除队列消息 并最终再次被拾起,导致循环重复。 SDK可以在有限数量后自动中断循环 迭代,或者你可以手动完成。