首页 > 解决方案 > Azure 服务总线转发死信消息转发

问题描述

我在 Azure 服务总线中有一个队列设置,消息 TTL 为 5 秒(这太短了吗?我注意到它会保持活动状态超过 5 秒)。

到期后,我希望将其转发到另一个队列进行处理(超时队列)。我已将 ForwardDeadLetteredMessagesTo 属性设置为超时队列的名称,但是当原始队列上的消息过期时,它只会进入原始队列死信队列,而不是进入超时队列。

我是否误解了这应该如何工作?

我的用例是我有一些消费者只在一天中的某些时间在主队列上收听。如果没有在主队列上监听,我希望它过期并被推送到超时队列。超时队列总是有一个消费者,因此它应该拾取该消息并正确处理它。我可以有多个主队列,所以我想让所有主队列将它们过期的消息转发到超时队列,这样我就不必为每个主队列的死信队列都有一个消费者。

标签: azureazureservicebusazure-servicebus-queues

解决方案


这个场景听起来很合理。设置DefaultMessageTimeToLive和/或Message.TimeToLive使用死信自动转发是不够的。实际上,您必须首先将那些过期的消息变成死信。为此,您还需要设置EnableDeadLetteringOnMessageExpiration该场景才能正常工作。

我注意到它将保持活动状态超过 5 秒)。

这很正常。对于要从​​队列中删除的过期消息,必须有一个活动的侦听器。因此,如果您有许多已过期的消息并且没有单个消费者尝试接收未过期的消息,请注意不要使队列溢出。


推荐阅读