如何在队列级别设置 MaxDequeueCount

pme*_*yer 1 c# azure azure-webjobs azure-webjobssdk

我有一个 Azure WebJob 侦听多个队列...

我可以在作业级别指定 MaxDequeueCount ...

    config.UseTimers();
    config.Queues.BatchSize = 32;
    config.Queues.MaxDequeueCount = 6;
Run Code Online (Sandbox Code Playgroud)

在队列级别设置 MaxDequeueCounts 的最佳方法是什么?我知道我可以获得实际的出队计数并将其“手动”发送到毒队列,但我想知道这是否可以以更好的方式完成......

Amo*_*mor 6

如果您想为不同的队列触发函数设置不同的配置,您可以实现自己的 QueueProcessorFactory 并根据队列名称重置上下文的一些配置。

public class MyQueueProcessorFactory : IQueueProcessorFactory
{
    public  QueueProcessor Create(QueueProcessorFactoryContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context");
        }
        if (context.Queue.Name == "queue1")
        {
            context.MaxDequeueCount = 2;
        }
        else if (context.Queue.Name == "queue2")
        {
            context.MaxDequeueCount = 4;
        }
        return new QueueProcessor(context);
    }
}
Run Code Online (Sandbox Code Playgroud)

要使用自定义 QueueProcessorFactory,我们需要如下设置 QueueProcessorFactory 属性。

JobHostConfiguration config = new JobHostConfiguration();
config.Queues.QueueProcessorFactory = new MyQueueProcessorFactory();
JobHost host = new JobHost(config);
Run Code Online (Sandbox Code Playgroud)