Components Involved :Spring Config-server,Spring AMQP(RabbitMQ),Spring Config-client
Goal :使用推送通知通知config-client刷新配置 .
-
RabbitMQ instance :从码头工具中心,我拉出了rabbitmq:3管理图片然后跑了 .
-
Config-client AMQP version pom.xml:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
<version>1.3.1.RELEASE</version>
</dependency>
- Config-server pom.xml:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-monitor</artifactId>
<version>1.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
<version>1.2.1.RELEASE</version>
</dependency>
Fault Tolerance Scenario: - 打开RabbitMQ服务/集群/实例 . - 所有配置客户端都失去连接 . 队列被删除,因为它们被创建为自动删除 . - 恢复RabbitMQ服务 .
-
Expectation :所有配置客户端都应该重新成功连接 .
-
Reality :这不起作用 . 请看下面的错误 .
2018年3月27日09:07:12.850 WARN 21251 --- [AO2Q06fYCALSA-6] osarlistener.BlockingQueueConsumer:无法声明队列:springCloudBus.anonymous.FGZPCPqzTAO2Q06fYCALSA 2018年3月27日09:07:12.851 ERROR 21251 - - [AO2Q06fYCALSA-6] osarlSimpleMessageListenerContainer:消费者在启动时收到致命异常org.springframework.amqp.rabbit.listener.QueuesNotAvailableException:无法为侦听器准备队列 . 队列不存在或者代理不允许我们使用它 . 在org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:548)在org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer $ AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1335)在java.base / JAVA org.springframework.amqp.rabbit.listener.BlockingQueueConsumer $ DeclarationException:致.lang.Thread.run(Thread.java:844)无法申报队列(或多个):[springCloudBus.anonymous.FGZPCPqzTAO2Q06fYCALSA]在org.springframework . 在org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:520)amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:621)[公共帧省略]引起的:产生java.io.IOException :null引起:com.rabbitmq.client.ShutdownSignalException:通道错误;协议方法:#method(reply-code = 404,reply-text = NOT_FOUND - 没有队列'vhost'/'中的springCloudBus.anonymous.FGZPCPqzTAO2Q06fYCALSA',class-id = 50,method-id = 10)[省略了常用帧]引起:com.rabbitmq.client.ShutdownSignalException:通道错误;协议方法:#method(reply-code = 404,reply-text = NOT_FOUND - 在vhost'/'中没有队列'springCloudBus.anonymous.FGZPCPqzTAO2Q06fYCALSA',class-id = 50,method-id = 10)在com.rabbitmq . client.impl.ChannelN.asyncShutdown(ChannelN.java:505)[省略了常用的帧] 2018-03-27 09:07:12.852 ERROR 21251 --- [AO2Q06fYCALSA-6] osarlSimpleMessageListenerContainer:从中止的消费者停止容器2018-03 -27 09:07:12.853 INFO 21251 --- [AO2Q06fYCALSA-6] osarlSimpleMessageListenerContainer:等待 Worker 完成 . 2018-03-27 09:07:12.853 INFO 21251 --- [AO2Q06fYCALSA-6] o.s.a.r.l.SimpleMessageListenerContainer:成功等待 Worker 完成 .
- Description of error from my understanding 配置客户端使用现有代理,侦听器尝试重新连接但队列丢失 . 默认情况下进行3次重试 . 这是预期的,因为我们正在经历Rabbit MQ服务关闭并重新启动而没有持久数据的情况 . 问题是重新连接失败 . 我从许多文章中得知,我们提到我们不能在不使用admin的情况下重新排队 . 为此,我们创建了一个XML配置文件,用于创建声明管理员和其他内容的属性bean .
What is the ask? - 如果在默认情况下将所有这些都注意到,那么它是否理想 . **我还没有工作解决方案 . 需要帮忙”
1 回答
我刚用Boot 2.0和Finchley.M9(总线2.0.0.M7)测试它没有问题...
RabbitExchangeQueueProvisioner
显式设置RabbitAdmin
以在重新 Build 连接后重新声明队列 .我现在会试用旧版本......
EDIT
与boot 1.5.10和Edgware.SR3(总线1.3.3.RELEASE)相同的结果 .
EDIT2
与1.3.1总线启动器相同的结果(引入1.2.1流兔子) . 工作良好 .