繁体   English   中英

在Azure WebJobs 3.0上使用IQueueProcessorFactory吗?

[英]IQueueProcessorFactory on Azure WebJobs 3.0?

随着Azure的WebJobs 2.0实施的实例IQueueProcessorFactory我必须做这样的事情:

_jobHostConfiguration = new JobHostConfiguration {
        StorageConnectionString = "XXX"
        DashboardConnectionString = "XXX"                
        };
_jobHostConfiguration.Queues.QueueProcessorFactory = new CustomQueueProcessorFactory();

其中CustomQueueProcessorFactory是这样的:

public class CustomQueueProcessorFactory: IQueueProcessorFactory
{
    public QueueProcessor Create(QueueProcessorFactoryContext context)
    {
        if (context == null) throw new ArgumentNullException(nameof(context));

        if (context.Queue.Name.Equals("queue_A") {
            context.BatchSize = 32; 
            context.NewBatchThreshold = 100;
        } 

        if (context.Queue.Name.Equals("queue_B")) {
            context.BatchSize = 2; 
        } 

        return new QueueProcessor(context);
    }        
}

我的问题是:如何使用Azure WebJobs 3.0做同样的事情

我找不到任何样品。

在Webjob 3.0中, QueuesOptions中的AddAzureStorage属性没有QueueProcessorFactory。

因此,您可以使用builder.ConfigureServices(s => s.AddSingleton<IQueueProcessorFactory>(factory)); 注入IQueueProcessorFactory 请参考以下步骤:

1.Program.cs。

class Program
{
    static void Main(string[] args)
    {
        var builder = new HostBuilder();
        var factory = new CustomQueueProcessorFactory();
        builder.ConfigureWebJobs(b =>
        {
            b.AddAzureStorageCoreServices();
            b.AddAzureStorage();
        });
        builder.ConfigureServices(s => s.AddSingleton<IQueueProcessorFactory>(factory));
        builder.ConfigureAppConfiguration((context, config) =>
        {
            config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
        });
        var host = builder.Build();
        using (host)
        {
            host.Run();
        }
    }
}

public class CustomQueueProcessorFactory : IQueueProcessorFactory
{
    public QueueProcessor Create(QueueProcessorFactoryContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }
        if (context.Queue.Name.ToString() == "queue")
        {
            context.MaxDequeueCount = 10;
        }
        else if (context.Queue.Name.ToString() == "queue1")
        {
            context.MaxDequeueCount = 10;
            context.BatchSize = 1;
        }
        return new QueueProcessor(context);
    }
}

2.Function.cs:

public static void ProcessQueueMessage([QueueTrigger("queue1")] string message, TextWriter log)
{
    log.WriteLine(message);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM