4

我们的后端正在收集原始数据并将其推送到 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;
    }                   

但正如我所说,我们希望让事情变得小而简单,所以如果我们可以使用单独的函数会很棒。

4

2 回答 2

6

不幸的是,SDK 不支持监听同一个队列的多个函数。

如果您希望调用多个函数,只需创建几个方法并将 webjob 函数作为入口点。然后 webjob 将调用这些函数。

或者,您可以让第二个函数监听不同的队列。第一个队列,将消息添加到此队列。

于 2015-04-13T16:38:55.980 回答
4

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

于 2015-04-13T17:10:57.593 回答