Spring Cloud Stream RabbitMQ随机失败并出现队列NOT_FOUND错误

我已经配置了RabbitMQ集群,并在RabbitMQ上通过这样的配置使用Spring Cloud Stream:

if (this.assignments && this.assignments[i] && this.assignments[i].User && user === this.assignments[i].User.id)

和application.yml

import org.springframework.cloud.stream.annotation.Input;
import org.springframework.messaging.SubscribableChannel;

public interface FileChangedSink {
    String INPUT = "fileChanged";

    @Input(INPUT)
    SubscribableChannel fileChanged();
}

版本:

spring:
  cloud:
    stream:
      bindings:
        fileChanged:
          destination: file.changed
          binder: stream_rabbit
          consumer:
            max-attempts: 1

      binders:
        stream_rabbit:
          type: rabbit
          environment:
            spring:
              rabbitmq:
                host: ${RABBITMQ_HOST}
                port: ${RABBITMQ_NODE_PORT_NUMber}
                username: ${RABBITMQ_DEFAULT_USER}
                password: ${RABBITMQ_DEFAULT_PASS}
                virtual-host: ${RABBITMQ_DEFAULT_VHOST}

通常,此配置可以正常运行,但是最近我遇到了这样的异常:

Spring Boot Version: 1.5.10.RELEASE
spring-cloud-starter-stream: 1.3.2.RELEASE
spring-cloud-starter-stream-rabbit: 1.3.3.RELEASE

注意:此错误是随机的,通常我的配置可以正常运行。

从错误中我可以了解到,在流尝试连接到队列之前并没有创建队列。

所以我的问题是它如何发生以及如何预防这种情况?

opencore 回答:Spring Cloud Stream RabbitMQ随机失败并出现队列NOT_FOUND错误

不再支持Boot 1.5.x;最新版本1.5.22于8月发布。

您需要将队列参数x-queue-master-locator设置为client-local,以确保在与应用程序连接的节点上创建匿名队列。

从spring-amqp 2.1版(由Spring Boot 2.1和活页夹2.2使用)开始,框架自动完成此操作。

在早期版本中,您可以使用代理上的策略为匿名队列设置主定位器。

https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit/issues/245

编辑

政策的屏幕截图:

Screen shot of policy

本文链接:https://www.f2er.com/3153556.html

大家都在问