Azure Queue Storage Triggered-Webjob - 一次将多个消息出列

ric*_*ard 3 azure-queues azure-webjobs

我有一个Azure队列存储触发的Webjob.我的webjob执行的过程是将数据索引到Azure搜索中.Azure搜索的最佳实践是将多个项目一起索引,而不是一次索引一个,这是出于性能原因(索引可能需要一些时间才能完成).

出于这个原因,我希望我的webjob将多个消息一起出列,这样我就可以遍历,处理它们,然后将它们全部索引到Azure Search中.

但是,我无法弄清楚如何让我的webjob一次出列一个以上.如何实现这一目标?

Bra*_*ang 6

出于这个原因,我希望我的webjob将多个消息一起出列,这样我就可以遍历,处理它们,然后将它们全部索引到Azure Search中.

根据您的描述,我建议您可以尝试使用Microsoft.Azure.WebJobs.Extensions.GroupQueueTrigger来满足您的要求.

此扩展将使您能够触发功能并接收消息组,而不是像[QueueTrigger]那样接收单个消息.

更多细节,您可以参考下面的代码示例和文章.

安装:

Install-Package Microsoft.Azure.WebJobs.Extensions.GroupQueueTrigger
Run Code Online (Sandbox Code Playgroud)

Program.cs中:

  static void Main()
        {
            var config = new JobHostConfiguration
            {
                StorageConnectionString = "...",
                DashboardConnectionString = "...."
            };
            config.UseGroupQueueTriggers();
            var host = new JobHost(config);
            host.RunAndBlock();
        }
Run Code Online (Sandbox Code Playgroud)

Function.cs:

 //Receive 10 messages at one time
 public static void MyFunction([GroupQueueTrigger("queue3", 10)]List<string> messages)
        {
            foreach (var item in messages)
            {
                Console.WriteLine(item);
            } 
        }
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述


如何将其更改为GroupQueueTrigger?这是一个简单的改变吗​​?

在我看来,这是一个很容易的变化.

您可以按照以下步骤操作:

1.从Nuget包管理器安装Microsoft.Azure.WebJobs.Extensions.GroupQueueTrigger包.

2.更改program.cs文件启用UseGroupQueueTriggers.

3.根据旧的触发功能更改webjobs功能.

注意:组队列消息触发器必须使用列表.

正如我的代码示例所示:

 public static void MyFunction([GroupQueueTrigger("queue3", 10)]List<string> messages)
Run Code Online (Sandbox Code Playgroud)

此函数将从"queue3"获取10条消息,因此在此函数中,您可以更改函数循环消息列表并处理它们,然后将它们全部索引到Azure搜索中.

4.将您的webjobs发布到azure Web应用程序.