I azur webjob Setup nächsten Code verwendet haben:Azure sdk ServiceBusTrigger löst Verarbeitung der gleichen Nachricht jede Minute
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. Konfigurationsabschnitt für Konfigurationsdatei-Warteschlangenname:
<appSettings>
<add key="WebjobIncomingQueueName" value="webjob-test" />
</appSettings>
ProcessingInfo Klasse:
public class ProcessingInfo {
public long ID { get; set; }
}
Das Problem dabei ist, dass für die gleiche Nachricht von webjob-test
Warteschlange ProcessQueueMessage
wird jede Minute nach dem ersten Auftreten ausgelöst. Laut Antwort here sollte dies einfach mit OnMessageOptions.AutoRenewTimeout
konfiguriert werden, aber es scheint nicht zu funktionieren. Kann jemand bitte mit diesem Problem helfen?
Die [Dokumentation] (https://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.onmessageoptions.aspx), spricht über die 60 Sekunden Timeout und beschreibt, wie Sie es erhöhen können. Dies ist für die OnMessageOptions-Klasse, aber ich kann nicht sehen, wie es sich auf WebJobs bezieht. – lxalln
@Vova. Nach dem Konfigurieren der Zeitüberschreitung löst es immer noch die gleiche Nachricht aus. Der einzige Grund, an den ich denken kann, ist, dass die Verarbeitungsfunktion mehr Zeit benötigt als das Timeout, aufgrund dessen das SDK annimmt, dass die Nachricht noch nicht verarbeitet wurde und sie daher wieder in die Warteschlange aufnimmt. Ist es möglich, die Verarbeitung zu einem Hintergrundthread zu verschieben? – Sandesh