【发布时间】:2019-12-09 18:52:15
【问题描述】:
我有一个项目使用 Spring Cloud Streams - RabbitMQ 在微服务中交换消息。对我的项目至关重要的一件事是我不能丢失任何信息。
为了尽量减少失败,我做了以下计划:
- 对队列中的消息使用默认重试方法
- 配置死信队列以在一段时间后再次将消息放入队列
- 为避免无限循环,仅允许将消息从死信队列重新发布到常规消息队列的几次(例如 5 次)。
前两项我相信我可以使用以下配置完成:
#dlx/dlq setup - retry dead letter 5 minutes later (300000ms later)
spring.cloud.stream.rabbit.bindings.input.consumer.auto-bind-dlq=true
spring.cloud.stream.rabbit.bindings.input.consumer.republish-to-dlq=true
spring.cloud.stream.rabbit.bindings.input.consumer.dlq-ttl=300000
spring.cloud.stream.rabbit.bindings.input.consumer.dlq-dead-letter-exchange=
#input
spring.cloud.stream.bindings.myInput.destination=my-queue
spring.cloud.stream.bindings.myInput.group=my-group
但是,我找不到searching on this reference guide 如何做我想做的事(主要是如何配置从死信队列重新发布的最大数量)。我不完全确定我走在正确的道路上 - 也许我应该手动创建第二个队列并编写我想要的代码,并且只将死信留给完全失败的消息(我必须定期检查并手动处理,因为我的系统不应该丢失任何消息)...
我是这些框架的新手,希望您能帮助我配置我的框架...
【问题讨论】:
标签: java configuration rabbitmq spring-cloud-stream dead-letter