Azure 服务总线消息在传送后会存在多长时间?

How long do Azure Service Bus messages live once delivered?

我被要求在作业(由服务总线消息启动)完成之前不要“CompleteAsync”我从 Azure 服务总线收到的消息,这可能是在我收到初始消息后最多七小时。

在 Azure 门户服务总线设置中,我有以下设置:

似乎在我最初收到消息(但未回复)后,消息不断被重新发送。 "Message time to live" 是否规定了它会持续重试多长时间?

'receive but close many hours later' 的场景能否与服务总线的功能配合使用?

您可以在此处阅读有关这些设置的说明:https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.queuedescription?view=azure-dotnet

从这个link:

  • 消息生存时间(天):获取或设置默认消息生存时间值。这是消息过期的持续时间,从消息发送到服务总线时开始。这是当未在消息上设置 TimeToLive 时使用的默认值 itself.Messages 早于其 TimeToLive 值的消息将过期并且不再保留在消息存储中。订阅者将无法接收过期 messages.A 消息的 TimeToLive 值可以低于此处指定的值,但默认情况下 TimeToLive 设置为 MaxValue。因此,此 属性 成为应用于消息的默认生存时间值。
  • 锁定持续时间(秒):获取或设置窥视锁定的持续时间;也就是说,消息为其他接收者锁定的时间量。 LockDuration 的最大值为 5 分钟;默认值为 1 分钟。
  • 重复检测历史(分钟):获取或设置定义重复检测历史持续时间的TimeSpan结构。默认值为 10 分钟。
  • 最大发送次数: 获取或设置最大发送次数。发送此次数后,消息将自动变为死信。

It appears once I initially receive the message (but do not respond), that the message keeps getting resent. Does "Message time to live" dictate how long it will keep retrying for?

不是真的。重试消息的次数将取决于 Max Delivery Count。一旦一条消息被传递了那么多次,它将被发送到死信子队列。

消息Time-to-Live 定义消息从队列中删除之前的时间段。如果 EnableDeadLetteringOnMessageExpiration 属性 设置为真,它可以被永久删除或发送到死信子队列。

Azure 服务总线使用锁定机制来防止多个消费者处理同一消息。但是,为了防止消息永远被锁定(例如获取锁然后进程崩溃),Azure Service Bus 有一个故障安全机制,会在一段时间(Lock Duration)后自动释放锁。

Message time to live用于指定消息可以在队列中停留多长时间而不被拾取。延迟后,它将自动从队列中删除。