azure - Azure 服务总线转发死信消息转发
问题描述
我在 Azure 服务总线中有一个队列设置,消息 TTL 为 5 秒(这太短了吗?我注意到它会保持活动状态超过 5 秒)。
到期后,我希望将其转发到另一个队列进行处理(超时队列)。我已将 ForwardDeadLetteredMessagesTo 属性设置为超时队列的名称,但是当原始队列上的消息过期时,它只会进入原始队列死信队列,而不是进入超时队列。
我是否误解了这应该如何工作?
我的用例是我有一些消费者只在一天中的某些时间在主队列上收听。如果没有在主队列上监听,我希望它过期并被推送到超时队列。超时队列总是有一个消费者,因此它应该拾取该消息并正确处理它。我可以有多个主队列,所以我想让所有主队列将它们过期的消息转发到超时队列,这样我就不必为每个主队列的死信队列都有一个消费者。
解决方案
这个场景听起来很合理。设置DefaultMessageTimeToLive
和/或Message.TimeToLive
使用死信自动转发是不够的。实际上,您必须首先将那些过期的消息变成死信。为此,您还需要设置EnableDeadLetteringOnMessageExpiration
该场景才能正常工作。
我注意到它将保持活动状态超过 5 秒)。
这很正常。对于要从队列中删除的过期消息,必须有一个活动的侦听器。因此,如果您有许多已过期的消息并且没有单个消费者尝试接收未过期的消息,请注意不要使队列溢出。
推荐阅读
- spring-boot - 无法在邮递员中附加文件以测试 spring boot restapi
- php - Laravel 6:将数据保存到数据透视表
- ruby-on-rails - Rspec 在运行所有测试时通过,但在运行单个测试时失败
- ruby-on-rails - 是否可以在 Rails 6 中禁用 Sass?
- php - 如何使用所有者组和用户更改 php 上传
- mongodb - Pentaho MongoDB Atlas 连接问题
- python - 在python中循环SQL查询并按日期保存到csv文件
- java - 如何在布局底部膨胀对话框?
- javascript - Angular 8 - AuthGuard 禁止通过点击访问 routerLinks
- go - 尝试停止创建更多 goroutine 时出现恐慌