Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单个队列消息上的多个Azure WebJob函数?_C#_Azure Webjobs_Azure Webjobssdk_Azure Queues - Fatal编程技术网

C# 单个队列消息上的多个Azure WebJob函数?

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;

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

  • 记录/归档它
  • 解析它并将解析结果发送到新队列
  • 为了保持小而清晰,我们希望有两个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将调用这些函数


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

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