Azure Storage Queue最大出队次数及poison queue触发规则咨询
Azure Storage Queue 问题解答
1. 队列消息最多可以被出队多少次?
- Azure 存储队列本身没有设置内置的最大出队次数限制,消息的
DequeueCount属性会在每次出队时自动累加,该属性仅作为元数据开放给业务逻辑使用,存储队列不会因为该数值达到某一阈值就自动处理消息。 - 如果你使用了Azure Functions、WebJobs SDK等上层封装框架,这些框架会默认配置最大出队次数阈值(默认值通常为5),达到阈值后框架会自动处理消息,该阈值支持自行调整。
2. 消息是否仅在处理抛出异常时才会被移入毒队列,和出队次数无关?
- 该假设不成立。首先需要明确:Azure存储队列原生没有内置毒队列自动迁移能力,所有毒队列的相关逻辑都是上层应用或者封装类库自行实现的。
- 以微软官方常用的队列处理封装逻辑为例:消息出队后会进入临时不可见状态,如果你在消息可见性超时时间到期前没有主动删除该消息,消息会重新变为可出队状态,
DequeueCount自动加1。当DequeueCount达到框架设定的阈值时,消息就会被自动移入毒队列。触发该逻辑的场景不仅包含处理过程抛出异常未删除消息,还包含消息处理耗时超过可见性超时时间、进程意外退出没来得及删除消息等情况,和是否抛出异常没有绝对绑定关系。 - 如果你是自行实现Windows服务的队列处理逻辑,可以自行定义毒队列的迁移规则,既可以仅在捕获到处理异常时迁移消息,也可以结合出队次数做判断,原生存储队列不会做强制限制。
内容的提问来源于stack exchange,提问作者nen
相关产品推荐
相关产品推荐

