我使用的是Azure WebJobs SDK2.0,当我指定VisibilityTimeout然后是MaxDequeuCount时,当消息失败3次时不会从队列中删除,而是只复制到毒队列中。您可以看到DequeueCount大于MaxDequeuCount,并且消息仍然在队列中。
class Program
{
// Please set the following connection strings in app.config for this WebJob to run:
// AzureWebJobsDashboard and AzureWebJobsStorage
static void Main()
{
var config = new JobHostConfiguration();
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
config.Queues.BatchSize = 8;
config.Queues.MaxDequeueCount = 3;
config.Queues.VisibilityTimeout = TimeSpan.FromSeconds(5);
config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(3);
var host = new JobHost(config);
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
}
该函数正在抛出一个异常以模拟错误条件。
public class Functions
{
// This function will get triggered/executed when a new message is written
// on an Azure Queue called queue.
public static void ProcessQueueMessage([QueueTrigger("queue")] string message, TextWriter log)
{
log.WriteLine(message);
throw new Exception("There was an error processing the message");
}
}
三次尝试后,消息将被移动到毒药队列,这是预期的,但大约10分钟后,移动到毒队列的消息再次出现在队列中。控制台输出
在队列中,您可以看到Dequeue计数大于MaxDequeuCount,而且消息仍未从队列中删除。队列
在毒队列中,您可以看到M1消息处理了两次。
发布于 2017-06-21 02:20:23
当队列失败3次时,消息不会从队列中删除,而只是复制到毒队列中。
据我所知,目前我们无法在WebJobs SDK中使用StorageSDK8.x,其他人也报告了类似的问题。
如果您正在使用8.x,请尝试降低的版本。此外,在第二个链接中,asiffermann与示例共享了一个解决方案:编写一个自定义QueueProcessor以在CopyMessageToPoisonQueueAsync中创建一个新的CloudQueueMessage,请参考它。
https://stackoverflow.com/questions/44642535
复制相似问题