C# 单个队列消息上的多个Azure WebJob函数?
我们的后端正在收集原始数据并将其推送到Azure存储队列。我们希望对每个排队的消息执行两件事:C# 单个队列消息上的多个Azure WebJob函数?,c#,azure-webjobs,azure-webjobssdk,azure-queues,C#,Azure Webjobs,Azure Webjobssdk,Azure Queues,我们的后端正在收集原始数据并将其推送到Azure存储队列。我们希望对每个排队的消息执行两件事: 记录/归档它 解析它并将解析结果发送到新队列 为了保持小而清晰,我们希望有两个WebJob函数指向同一队列: public static void ArchiveRawData([QueueTrigger("raw")] RawData data, [Blob("{Ticks}.dat")] out string raw) { raw = data.Data;
public static void ArchiveRawData([QueueTrigger("raw")] RawData data, [Blob("{Ticks}.dat")] out string raw)
{
raw = data.Data;
}
public static void ParseRawData([QueueTrigger("raw")] RawData data, [Queue("result")] out Parsed parsedData
{
var parsed = Parser.Parse(data.Data);
parsedData = parsed;
}
但这不起作用:ArchiveRawData或ParseRawData获得消息,但另一个不获得消息
在某个地方是否有一个选项可以使上述场景工作第一个函数完成后(无论是哪一个函数),消息现在似乎会自动退出队列。但我认为WebJobs SDK可以检测到具有相同QueueTrigger的多个函数,并且只有在所有函数完成后才能将消息出列
为了解决这个问题,我们目前在一个函数中有两个输出:
public static void ParseRawData([QueueTrigger("raw")] RawData data, [Queue("result")] out Parsed parsedData, [Blob("{Ticks}.dat")] out string raw)
{
var parsed = Parser.Parse(data.Data);
parsedData = parsed;
raw = data.Data;
}
但正如我所说的,我们希望保持事情的小型化和简单化,因此如果我们可以使用单独的函数,那就太好了。不幸的是,SDK不支持侦听同一队列的多个函数 如果希望调用多个函数,只需创建几个方法,并将webjob函数作为入口点。然后webjob将调用这些函数
或者,您可以让第二个函数侦听不同的队列。第一个队列将向该队列添加一条消息。如果使用ServiceBus主题替换存储队列,则可以在其上放置两个订阅,每个WebJob一个订阅。然后,每个WebJob都将获得自己的每条消息的副本