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

时间:2017-06-05 22:50:57

标签: azure-webjobs azure-queues

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

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

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

1 个答案:

答案 0 :(得分:5)

  

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

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

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

更多详细信息,您可以参考下面的代码示例和article

安装:

Install-Package Microsoft.Azure.WebJobs.Extensions.GroupQueueTrigger

的Program.cs:

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

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);
            } 
        }

结果:

enter image description here

  

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

在我看来,这是一个很容易的改变。

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

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

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

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

注意:组队列消息触发器必须使用list。

正如我的代码示例所示:

 public static void MyFunction([GroupQueueTrigger("queue3", 10)]List<string> messages)

此功能将从&#34; queue3&#34;中获取10条消息。有一次,所以在这个函数中你可以改变函数循环消息列表并处理它们,然后将它们全部索引到Azure搜索中。

4.将您的网络工具发布到azure网络应用程序。