2017-06-05 121 views
1

我有一个Azure队列存储触发的Webjob。我的webjob执行的过程是将数据编入索引到Azure搜索。 Azure搜索的最佳做法是将多个项目一起索引,而不是一次索引,这是出于性能方面的考虑(编制索引可能需要一些时间才能完成)。Azure队列存储触发Webjob - 一次出队多个邮件

由于这个原因,我希望我的webjob能够将多个消息一起出队,以便循环,处理它们,然后将它们一起编入Azure搜索。

但是我无法弄清楚如何让我的webjob一次多出一个队列。这如何实现?

回答

3

由于这个原因,我想让我的webjob将多个消息一起出队,这样我就可以循环,处理它们,然后将它们一起索引到Azure搜索中。

根据您的描述,我建议您可以尝试使用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功能。

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

至于我的代码示例所示:

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

此功能将得到“队列3”一次性10个消息,因此在这个功能,你可以改变的功能回路的消息的列表,并对其进行处理,然后将它们一起索引到Azure搜索。

4.发布您的webjobs到天蓝色的web应用程序。

+0

我已经有一个QueueTrigger项目工作。我将如何获得改为GroupQueueTrigger?这是一个简单的改变吗​​? – richard

+0

我已经更新了我的答案。 –