【问题标题】:Can I queue multiple items from a single run of an Azure Function?我可以将 Azure 函数的一次运行中的多个项目排队吗?
【发布时间】:2016-07-22 07:56:14
【问题描述】:

我有一个 Node.js timerTrigger Azure 函数,它处理集合并将处理结果排队以供进一步处理(通过 Node.js queueTrigger 函数)。

代码如下:

module.exports = function (context, myTimer) {
    collection.forEach(function (item) {
        var items = [];

        // do some work and fill 'items'

        var toBeQueued = { items: items };

        context.bindings.myQueue = toBeQueued;
    });

    context.done();
};

此代码只会将最后一个toBeQueued 排队,而不是我尝试排队的每一个。

有没有办法让多个项目排队?

更新

明确地说,我说的是在 forEach 的每次迭代中对 toBeQueued 进行排队,而不仅仅是对数组进行排队。是的,Azure Functions 存在问题,因此我无法对数组进行排队,但我有一个解决方法;即{ items: items }

【问题讨论】:

    标签: node.js azure azure-storage-queues azure-functions


    【解决方案1】:

    还没有,但我们将在一周内解决这个问题,敬请期待:) 您将能够像上面尝试的那样将数组传递给绑定。

    我们在公共回购here 中跟踪此问题时遇到了问题。感谢您的报告。

    【讨论】:

    • 感谢您的回答并让我参考 GitHub 中的存储库。我想我们在谈论 2 个不同的问题,对吗?我更新了问题以澄清这一点。
    • 我看到了区别。对于上述数组修复后的 Node.js,该消息数组仅在您的函数返回 之后处理。 IE。在您的功能完成之前,不会发生实际的消息队列。我认为这将解决最常见的情况。关于您在上面对数组进行排队的解决方法 - 这不会导致写入多个单独的队列消息。数组支持适用于需要将多个单独的消息排入队列的场景。
    • 是的,明白了.. 就像你说的,我使用解决方法只是为了解决阵列问题。回到我的问题,我试图实现的场景不受支持,(1)会吗?(2)我的选择是什么?
    • 你能解释一下你的场景吗?您是说您需要在每次循环迭代时将实际的队列消息排入队列,而不是将所有消息收集在一个数组中,运行时在您的函数返回后将它们一一排入队列?如果有,你能解释一下原因吗?
    • 在我解释原因之前,在the coming fix 之后,“运行时将它们一个一个地排入队列”这句话引起了我的注意:) 在the coming fix 之后,如果我对一个数组进行排队,它会是一个单个消息排队并且它恰好是一个数组(而不是单个对象),或者数组中的每个项目都是队列中的单独消息?如果是后者,你解决了我的问题,否则,我会解释我的场景:)
    【解决方案2】:

    Mathewc 的答案是正确的一个节点。

    对于 C#,您现在可以通过将 ICollector<T> 指定为输出队列参数的类型。

    下面是我有两个输出队列的示例,我通过 for 循环添加其中一个。

    public static void Run(Item inbound, DateTimeOffset InsertionTime, ICollector<Item> outbound, ICollector<LogItem> telemetry, TraceWriter log)
    {
        log.Verbose($"C# Queue trigger function processed: {inbound}");
    
        telemetry.Add(new LogItem(inbound, InsertionTime));
    
        if(inbound.current_generation < inbound.max_generation)
        {
            for(int i = 0; i < inbound.multiplier; i++) {
                outbound.Add(Item.nextGen(inbound));
            }
        }
    }
    

    【讨论】:

    • 还有一个带有 AddAsync() 的 IAsyncCollector
    猜你喜欢
    • 1970-01-01
    • 2014-03-07
    • 2015-05-22
    • 2022-07-29
    • 2017-07-10
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    相关资源
    最近更新 更多