【发布时间】:2017-01-24 16:46:59
【问题描述】:
我注意到我的 Web 作业的多个实例正在接收相同的消息并最终对其采取行动。这不是期望的行为。我希望同时处理多条消息,但是,我不希望 Web 作业的多个实例处理同一条消息。
- 我的网络作业是连续运行类型的。
- 我使用 QueueTrigger 接收消息并调用函数
- 我的函数运行了几个小时。
我查看了 JobHostConfiguration.BatchSize 和 MaxDequeue 属性,但我不确定这些。我只是想要一个处理消息的实例,并且可能需要几个小时才能完成。
这是我在网络作业日志中看到的,表明收到了两次消息。
[2017 年 1 月 24 日 16:17:30 > 7e0338:信息] 执行: 'Functions.RunExperiment' - 原因:'检测到新队列消息 '运行实验'。'
[2017 年 1 月 24 日 16:17:30 > 7e0338:信息] 执行: 'Functions.RunExperiment' - 原因:'检测到新队列消息 '运行实验'。'
【问题讨论】:
-
不确定这是否是最佳解决方案,但我通过检查 dequeueCount 以了解是运行还是退出来解决幂等性问题。我希望消息队列默认或允许配置,以防止消息扇出。
-
您是否发现任何异常?当抛出异常时,消息将被丢弃。
-
没有抛出异常。在 webjob 日志中可以看到两个实例正在运行,它们将完成和复制工作。
-
哦,如果处理消息需要一段时间,你应该更新锁。你可以使用`OnMessageOptions.AutoRenewTimeout`。见stackoverflow.com/a/33785389/4167200
标签: azure-webjobs azure-storage-queues