我在Azure Service Bus中有一个队列设置,消息TTL为5秒(这太短了吗?我注意到它将保持活动状态超过5秒)。
过期后,我希望将其转发到另一个队列进行处理(超时队列)。我已将ForwardDeadLetteredMessagesTo属性设置为超时队列的名称,但是当消息在原始队列上到期时,它只会进入原始队列死信队列而不是进入超时队列。
我是否误解了这应该如何运作?
我的用例是我有一些消费者只在一天中的某些时间收听主要队列。如果没有任何东西正在侦听主队列,我希望它过期并被推送到超时队列。超时队列总是有一个消费者,因此它应该接收该消息并正确处理它。我可以有多个主队列,所以我想让所有主队列将过期的消息转发到超时队列,这样我就不必为每个主队列的死信队列都有一个消费者。
答案 0 :(得分:0)
情景听起来很合理。使用死信自动转发设置DefaultMessageTimeToLive
和/或Message.TimeToLive
是不够的。实际上你必须先将那些过期的消息写入死信。为此,您还需要设置EnableDeadLetteringOnMessageExpiration
以使该方案有效。
我注意到它会保持活动状态的时间超过5秒。)
这是正常的。对于要从队列中删除的过期消息,必须有一个活动的侦听器。因此,如果有许多消息过期且没有一个消费者尝试接收未过期的消息,请注意不要过度流动队列。