单个队列消息上有多个Azure WebJob功能



我们的后端正在收集原始数据并将其推送到Azure存储队列。我们想对每个排队的消息做两件事

  1. 记录/存档
  2. 对其进行解析并将解析结果发送到新队列

为了保持事物的简洁明了,我们希望有两个指向同一队列的WebJob函数:

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函数作为入口点。然后网络作业将调用这些函数。

或者,您可以让第二个函数侦听不同的队列。第一个队列向该队列添加一条消息。

如果用ServiceBus主题替换存储队列,则可以在其上放置两个订阅,每个WebJob一个订阅。然后,每个WebJob都将获得每条消息的自己的副本。

相关内容

  • 没有找到相关文章

最新更新