我已经设置了一个带有DLQ的spring xd流,我已经进行了循环配置 从DLQ返回主队列。
xdbus.s3Test.0-->DLQ-->xdbus.s3Test.0
stream create s3Test --definition "aws-s3-source | log"
stream deploy S3test --properties module.*.consumer.autoBindDLQ=true
要使它成为一个圆圈,我必须更改DLQ的配置,从Rabbit mq ADMIN UI手动添加。
x-message-ttl: 30000
x-dead-letter-exchange: Default(Empty)
有没有办法在spring xd中我可以配置DLQ属性?因为DL队列将在运行时由XD生成,理想情况下我不能在生产中篡改它。我可以设置一些属性来设置DLQ的上述属性吗? / p>
答案 0 :(得分:2)
您无法通过XD设置DLQ属性,但您可以在RabbitMQ中创建适用于XD创建的DLQ的策略:
$ rabbitmqctl set_policy XDDLQTTL "xdbus\..*\.dlq" '{"dead-letter-exchange":"", "message-ttl":30000}' --apply-to queues
这会将您所需的属性应用于以xdbus.
开头并以.dlq
开头的所有队列。
我刚用它进行了测试,效果很好......
xd:>stream create ticktock --definition "time --fixedDelay=60 | transform --expression=1/0 | log"
Created new stream 'ticktock'
xd:>stream deploy ticktock --properties module.*.consumer.autoBindDLQ=true
Deployed stream 'ticktock'
你可以看到消息循环(因为除以零)。
一个警告 - 这将永远尝试;如果你希望在重试一段时间后中止,你需要模块中的一些代码来查看x-death
标题。