首页 文章

重新创建队列并重新连接到rabbitMQ

提问于
浏览
2

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 回答

  • 0

    我刚用Boot 2.0和Finchley.M9(总线2.0.0.M7)测试它没有问题...

    2018年3月27日13:25:06.125 INFO 36716 --- [主要] csbrpRabbitExchangeQueueProvisioner:入站队列声明:springCloudBus.anonymous.tySvAS8BSpS7OtQ_VCeiVQ,势必:springCloudBus ... 2018年3月27日13:26:38.220 ERROR 36716 --- [127.0.0.1:5672] osarcCachingConnectionFactory:通道关闭:连接错误;协议方法:#method(reply-code = 320,reply-text = CONNECTION_FORCED - 代理强制连接关闭,原因'shutdown',class-id = 0,method-id = 0)2018-03-27 13:26:58.757 INFO 36716 --- [pS7OtQ_VCeiVQ-6] osarcCachingConnectionFactory:试图连接到:[本地主机:5672] 2018年3月27日13:26:58.761 INFO 36716 --- [pS7OtQ_VCeiVQ-6] osarcCachingConnectionFactory:创建新的连接: rabbitConnectionFactory#52c8295b:5 / SimpleConnection @ 74846ead[delegate = amqp://guest@127.0.0.1:5672 /,localPort = 49746] 2018-03-27 13:26:58.762 INFO 36716 --- [pS7OtQ_VCeiVQ-6] osamqp.rabbit.core.RabbitAdmin:Auto -declaring非持久,自动删除或独占队列(springCloudBus.anonymous.tySvAS8BSpS7OtQ_VCeiVQ)持久:false,自动删除:true,exclusive:true . 如果代理停止并在连接工厂处于活动状态时重新启动,它将被重新声明,但所有消息都将丢失 .

    RabbitExchangeQueueProvisioner 显式设置 RabbitAdmin 以在重新 Build 连接后重新声明队列 .

    我现在会试用旧版本......

    EDIT

    与boot 1.5.10和Edgware.SR3(总线1.3.3.RELEASE)相同的结果 .

    EDIT2

    与1.3.1总线启动器相同的结果(引入1.2.1流兔子) . 工作良好 .

相关问题