我有一个用例,其中消息必须经过一定的延迟才能重新处理,并且还想在重试之间引入指数补偿,因此文档中提到的ReRouteDlqApplication完全适合我的目的。
https://cloud.spring.io/spring-cloud-static/Finchley.SR1/multi/multi__rabbitmq_binder.html
我唯一需要的额外信息是,是否还可以通过application.properties配置delayExchange并将其与原始队列绑定,而不是通过Bean进行相同的操作,因此无需重复逻辑跨多个错误处理程序(即,每个DLQ一个错误处理程序)
请让我知道是否需要任何额外的信息。
编辑:
根据收到的评论,我删除了所有交换和队列,然后在本地重新尝试,但是仍然遇到以下错误 错误:“收到“ x延迟消息”,但当前为“主题””
我的属性文件:
spring.cloud.stream.bindings.packagingConsumerChannel.destination=fabric-exchange
spring.cloud.stream.bindings.packagingConsumerChannel.group=package-queue
spring.cloud.stream.bindings.packagingConsumerChannel.consumer.max-attempts=1
spring.cloud.stream.rabbit.bindings.packagingConsumerChannel.consumer.durableSubscription=true
spring.cloud.stream.rabbit.bindings.packagingConsumerChannel.consumer.bindingRoutingKey=package
spring.cloud.stream.rabbit.bindings.packagingConsumerChannel.consumer.autoBindDlq=true
spring.cloud.stream.rabbit.bindings.packagingConsumerChannel.consumer.dlqDeadLetterExchange=
spring.cloud.stream.rabbit.bindings.packagingConsumerChannel.consumer.delayedExchange=true
答案 0 :(得分:0)
将使用者绑定属性delayedExchange
设置为true
。
提交已添加到version 1.2中。
编辑
@SpringBootApplication
@EnableBinding(Sink.class)
public class So54986375Application {
public static void main(String[] args) {
SpringApplication.run(So54986375Application.class, args);
}
@StreamListener(Sink.INPUT)
public void listen(String in) {
}
}
和
spring.cloud.stream.rabbit.bindings.input.consumer.delayedExchange=true
和