单个队列消息上的多个 Azure WebJob 函数?
Multiple Azure WebJob functions on single queue message?
我们的后端正在收集原始数据并将其推送到 Azure 存储队列。我们想对每条排队的消息做两件事:
- Log/archive它
- 解析并将解析结果发送到新队列
为了保持简洁明了,我们希望有两个 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函数为入口即可。然后 webjob 将调用这些函数。
或者,您可以让第二个函数监听不同的队列。第一个队列,向该队列添加一条消息。
如果将存储队列替换为服务总线主题,则可以在其上放置两个订阅,一个用于每个 WebJob。然后每个 WebJob 都会获得自己的每条消息副本。
我们的后端正在收集原始数据并将其推送到 Azure 存储队列。我们想对每条排队的消息做两件事:
- Log/archive它
- 解析并将解析结果发送到新队列
为了保持简洁明了,我们希望有两个 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函数为入口即可。然后 webjob 将调用这些函数。
或者,您可以让第二个函数监听不同的队列。第一个队列,向该队列添加一条消息。
如果将存储队列替换为服务总线主题,则可以在其上放置两个订阅,一个用于每个 WebJob。然后每个 WebJob 都会获得自己的每条消息副本。