我有一个Azure Queue存储触发的Webjob。我的webjob执行的过程是将数据索引到Azure搜索中。 Azure搜索的最佳做法是将多个项目一起索引,而不是一次索引一个,这是出于性能原因(索引可能需要一些时间才能完成)。
出于这个原因,我希望我的webjob将多个消息一起出列,这样我就可以遍历,处理它们,然后将它们全部索引到Azure Search中。
然而,我无法弄清楚如何让我的webjob一次出列一个以上。如何实现这一目标?
答案 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);
}
}
结果:
如何将其更改为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网络应用程序。