【发布时间】:2021-10-18 20:21:17
【问题描述】:
我有一个在计时器触发器上运行的 Azure 函数,它从数据源中查找一组记录并使用它来构建消息数组,然后将其发送到队列输出。
该函数报告(通过context.log())找到 4 条记录,然后为队列构建一个包含 4 条消息的数组。但是队列有 8 条消息。
我没有看到函数被触发/调用了两次(据我所知......查看日志等)。我只是看到队列中有双重条目。
基本细节:
- Node.js (v12) 异步函数
- 消费计划(版本~3)
- 运行不到 1 秒
- 使用
context.bindings.outboundQueue = outgoingMessagesArray发送到队列 - 定时器触发器设置了
"useMonitor": false(根据GitHub)
有什么想法吗?
更新: 唉...现在我看到了双重函数调用。日志如下所示:
2021-08-17T14:28:00.011 [Information] Executing 'Functions.sendToQueue' (Reason='Timer fired at 2021-08-17T14:28:00.0112754+00:00', Id=f41c233f-42c9-4da6-ac8a-f354d04be0df)
2021-08-17T14:28:00.012 [Information] Executing 'Functions.sendToQueue' (Reason='Timer fired at 2021-08-17T14:28:00.0117734+00:00', Id=3b0a8941-604e-45b4-839b-33eb5e467751)
2021-08-17T14:28:00.133 [Information] Found 4 locations
2021-08-17T14:28:00.134 [Information] Built 4 messages
2021-08-17T14:28:00.220 [Information] Executed 'Functions.sendToQueue' (Succeeded, Id=f41c233f-42c9-4da6-ac8a-f354d04be0df, Duration=209ms)
2021-08-17T14:28:00.490 [Information] Found 4 locations
2021-08-17T14:28:00.490 [Information] Built 4 messages
2021-08-17T14:28:00.554 [Information] Executed 'Functions.sendToQueue' (Succeeded, Id=3b0a8941-604e-45b4-839b-33eb5e467751, Duration=542ms)
但是,Invocations 下的 Portal Monitor 每两分钟只报告一次调用。即使该日志显示计时器似乎触发了两次(相隔几分之一秒)。
【问题讨论】:
-
您是否有多个运行的应用程序槽都指向同一个数据源和队列?
-
并非如此。更清楚一点,我有一个生产槽有这个功能,但生产版本不使用队列。而且我在一个缓慢的阶段有相同功能的变体,但状态槽是唯一使用队列(全新队列)的东西。 prod 每周运行一次,stage 功能每两分钟运行一次(目前用于故障排除)。
标签: azure-functions azure-storage-queues