Azure sdk ServiceBusTrigger每分钟触发处理相同的消息

时间:2016-04-27 19:23:41

标签: c# azure-webjobs azureservicebus azure-webjobssdk azure-servicebus-queues

我使用下一代码设置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轻松配置,但它似乎无法正常工作。有人可以帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

当您对已编译的消息说,那么将不会回到队列中 实施例

foreach($newData as $purchaseOrderCode => $row){
    echo $purchaseOrderCode .' : ' . implode(',', $row['ship_product_code']);
}

查看link以获取更多信息

答案 1 :(得分:0)

当消息是毒药然后WebJob SDK不删除它时,可能会发生这种情况。

  

内容导致函数失败的消息称为poison   消息。当函数失败时,不会删除队列消息   并最终再次被拾起,导致循环重复。   SDK可以在有限数量后自动中断循环   迭代,或者你可以手动完成。

请参阅: https://docs.microsoft.com/en-us/azure/app-service-web/websites-dotnet-webjobs-sdk-storage-queues-how-to#a-idpoisona-how-to-handle-poison-messages