jjh*_*son 5 message-queue azure azure-servicebus-queues brokeredmessage
因此,我有一个天蓝色函数作为队列触发器,调用内部托管的 API。
对于如何处理由于有毒以外的问题而无法处理的消息,网上似乎没有明确的答案。
一个例子:
收到我的消息并且该函数尝试调用 API。消息有效负载是正确的并且可以处理,但是 API/服务由于某种原因而关闭(这个时间可能会超过 10 分钟)。目前发生的情况是消息传递计数达到其最大值(10),然后被推送到死信队列,这又会在之后的每条消息中发生。
我需要一种方法来要么不增加交付计数,要么在达到最大值时重置它。或者,我可以放弃对消息的查看锁定,而不增加传递计数,因为我想停止处理队列上的任何消息,直到 API/服务恢复并运行。这样我就可以确保所有可以处理的消息都不会因为服务之间的连接问题而陷入死信。
关于如何实现这一目标有什么想法吗?
目前发生的情况是消息传递计数达到其最大值(10),然后被推送到死信队列,这又会在之后的每条消息中发生。
正如本文档中关于Exceeding MaxDeliveryCount的说明:
队列和订阅有 QueueDescription.MaxDeliveryCount/SubscriptionDescription.MaxDeliveryCount 设置;默认值为 10。每当消息在锁定 (ReceiveMode.PeekLock) 下传递,但已被显式放弃或锁定已过期时,消息的 BrokeredMessage.DeliveryCount 就会递增。当 DeliveryCount 超过 MaxDeliveryCount 时,消息将移动到指定“MaxDeliveryCountExceeded”原因代码的 DLQ。
此行为无法关闭,但可以将 MaxDeliveryCount 设置为非常大的数字。
根据您的要求,我假设您可以按照以下方法来达到您的目的:
用于在 ReceiveMode.PeekLock 下接收消息
您可以在 Azure 门户上服务总线队列的“设置 > 属性”下指定 1 到 2147483647 之间的最大传递计数。
用于在 ReceiveMode.ReceiveAndDelete 下接收消息
当您的 API/服务关闭时,您可能会try-catch出现异常,然后您可以将消息重新发送到您的队列。
| 归档时间: |
|
| 查看次数: |
17948 次 |
| 最近记录: |