Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rabbitmq SpringCloudStream通过配置延迟了Exchange创建_Rabbitmq_Spring Cloud Stream - Fatal编程技术网

Rabbitmq SpringCloudStream通过配置延迟了Exchange创建

Rabbitmq SpringCloudStream通过配置延迟了Exchange创建,rabbitmq,spring-cloud-stream,Rabbitmq,Spring Cloud Stream,我有一个用例,在这个用例中,消息必须以一定的延迟重新处理,并且还希望在重试之间引入指数退避,文档中提到的重路由dLqApplication完全符合我的目的 我需要的唯一额外信息是,是否可以通过application.properties配置delayedExchange,并将其与原始队列绑定,而不是通过bean执行相同的操作,这样就不需要跨多个错误处理程序复制逻辑(即,每个DLQ一个错误处理程序) 如果需要任何额外的信息,请告诉我 编辑: 根据收到的评论,我已经删除了所有的交换和队列,然后在本

我有一个用例,在这个用例中,消息必须以一定的延迟重新处理,并且还希望在重试之间引入指数退避,文档中提到的重路由dLqApplication完全符合我的目的

我需要的唯一额外信息是,是否可以通过application.properties配置delayedExchange,并将其与原始队列绑定,而不是通过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

将使用者绑定属性
delayedExchange
设置为
true

提交已添加到中

编辑

@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) {

    }

}


我尝试过,但运气不好,我总是遇到这样的异常“收到的是“x-delayed-message”,但当前是“direct”,如果我没有将exchange类型设置为direct,则会收到异常“收到的是“x-delayed-message”,但当前是“topic”,我安装了延迟消息插件,并且在通过重置命令重置整个rabbitmq设置后尝试了此操作。错误消息非常清楚。无法更改现有的exchange类型。你必须先删除它。默认情况下,活页夹创建主题交换。如果它是直接的,则其他人正在创建它。我已删除了所有队列和交换,在我尝试时,我还注释了将exchangeType设置为direct,以便默认情况下创建主题交换,但同时,我遇到了“收到的“x延迟消息”,但当前为“主题”。我会用我的设置更新这个问题,请在我不知道除了添加一个例子之外我还能说什么的时候再复习一下;查看对我答案的编辑;它的工作原理和我描述的一模一样。您必须有一些其他代码来声明exchange。啊,是的,我在producer端有一个其他属性,它声明exchange类型,我认为这可能会导致问题,将对其进行调试,谢谢您的支持。spring.cloud.stream.rabbit.bindings.packagingProducerChannel.producer.exchangeType=true
spring.cloud.stream.rabbit.bindings.input.consumer.delayedExchange=true