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

Mik*_*nen 4 c# azure-queues azure-webjobs azure-webjobssdk

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

但是,这并不工作:无论是在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;
    }                   
Run Code Online (Sandbox Code Playgroud)

但正如我所说,我们希望保持小而简单,所以如果我们可以使用单独的功能那将是很好的.

Vic*_*aci 5

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

如果您想要调用多个函数,只需创建一些方法并使webjob函数成为入口点.然后webjob将调用这些函数.

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