【发布时间】:2016-12-25 21:54:58
【问题描述】:
我使用下一个代码设置了 azure webjob:
程序.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];
}
}
}
函数.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 轻松配置,但它似乎不起作用。有人可以帮忙解决这个问题吗?
【问题讨论】:
-
documentation,谈到了 60 秒超时,并描述了如何增加它。这是针对 OnMessageOptions 类的,但我看不出它与 WebJobs 有何关系。
-
@Vova。配置超时后是否仍然每分钟触发相同的消息?我能想到的唯一原因是处理函数花费的时间比超时时间长,因为 SDK 假设消息尚未处理,因此将其添加回队列。是否可以将处理移动到后台线程?
标签: c# azure-webjobs azureservicebus azure-webjobssdk azure-servicebus-queues