经过一段时间后重试 azure 服务总线上的消息?
Retrying a message on azure service bus after an elapsed time?
问题: 我需要 reschedule/defer 消息在用户定义的经过时间后作为接收方处理。
目标: 在 ServerUnavailable 的 HttpReponseException 之后,我想在 30 分钟后重试处理消息。它还必须遵循规则集,即在 10 次传递尝试后将消息发送到死信队列(根据主题规则自动发生)。
所以我有一个函数应用程序来处理 Azure 服务总线主题。这意味着 thread sleeping 不是一个选项。
我试过的:
- 我知道
messageSender.ScheduleMessageAsync(message, dateTime)
在发件人端用于安排消息以供稍后处理,这在发送新消息时有效,但是,作为接收者,我想在收到消息后在我这边执行此操作异常。
- 我尝试使用
messageReceiver.DeferAsync(message.SystemProperties.LockToken, properties)
,属性包含新的“ScheduledEnqueueTimeUtc”,这确实会延迟消息,但 序列 ID 似乎不同步,因此无法进行接收我的延迟消息。
- 如果我克隆消息,我无法设置
SystemProperty.DeliveryCount
,因为它是只读的,因此死信队列规则将无法按预期运行。我可以在我的函数应用程序中创建 UserProperty's
并手动计算消息回复次数和预定日期,但我想知道是否有更好的方法来做到这一点?
我们会采纳任何建议。
您如何看待创建重试政策?而不是 thread.sleep 您可以在队列中的另一个时间安排相同的消息,但特定时间为 +30 分钟,
并返回积极响应以清除当前消息,
您需要保留 deliveryCount 规则,所以您可能需要将 属性 添加到有计数的消息队列中?
我认为这个想法是合乎逻辑的,here 这篇文章可能对您有所帮助,您需要用 ScheduleMessageAsync
更改 thread.sleep
我设法解决了使用自定义重试消息的问题 UserProperties
。
这符合 Houssem Dbira 的建议和我的第三点,但我没有使用自定义重试策略对象,而是创建了一个辅助函数来管理重试计数以及再次将消息安排到服务总线。
下面的 link 将带您到我创建的辅助函数,如果您有兴趣自己做的话。
问题: 我需要 reschedule/defer 消息在用户定义的经过时间后作为接收方处理。
目标: 在 ServerUnavailable 的 HttpReponseException 之后,我想在 30 分钟后重试处理消息。它还必须遵循规则集,即在 10 次传递尝试后将消息发送到死信队列(根据主题规则自动发生)。
所以我有一个函数应用程序来处理 Azure 服务总线主题。这意味着 thread sleeping 不是一个选项。
我试过的:
- 我知道
messageSender.ScheduleMessageAsync(message, dateTime)
在发件人端用于安排消息以供稍后处理,这在发送新消息时有效,但是,作为接收者,我想在收到消息后在我这边执行此操作异常。 - 我尝试使用
messageReceiver.DeferAsync(message.SystemProperties.LockToken, properties)
,属性包含新的“ScheduledEnqueueTimeUtc”,这确实会延迟消息,但 序列 ID 似乎不同步,因此无法进行接收我的延迟消息。 - 如果我克隆消息,我无法设置
SystemProperty.DeliveryCount
,因为它是只读的,因此死信队列规则将无法按预期运行。我可以在我的函数应用程序中创建UserProperty's
并手动计算消息回复次数和预定日期,但我想知道是否有更好的方法来做到这一点?
我们会采纳任何建议。
您如何看待创建重试政策?而不是 thread.sleep 您可以在队列中的另一个时间安排相同的消息,但特定时间为 +30 分钟, 并返回积极响应以清除当前消息,
您需要保留 deliveryCount 规则,所以您可能需要将 属性 添加到有计数的消息队列中?
我认为这个想法是合乎逻辑的,here 这篇文章可能对您有所帮助,您需要用 ScheduleMessageAsync
更改 thread.sleep我设法解决了使用自定义重试消息的问题 UserProperties
。
这符合 Houssem Dbira 的建议和我的第三点,但我没有使用自定义重试策略对象,而是创建了一个辅助函数来管理重试计数以及再次将消息安排到服务总线。
下面的 link 将带您到我创建的辅助函数,如果您有兴趣自己做的话。