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

涡轮编码器

涉及的组件:Spring Config-server,Spring AMQP(RabbitMQ),Spring Config-client

目标:使用推送通知来通知config-client刷新配置。

  • RabbitMQ实例:从docker hub,我拉出Rabbitmq:3-management图像并运行。
  • 配置客户端AMQP版本pom.xml:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        <version>1.3.1.RELEASE</version>
    </dependency>
    
  • 配置服务器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>
    

容错方案: -降低RabbitMQ服务/集群/实例。-所有配置客户端失去连接。由于队列是作为自动删除创建的,因此将被删除。-恢复RabbitMQ服务。

  • 期望:所有配置客户端应重新连接成功。

  • 现实:这不起作用。请查看以下错误。

2018-03-27 09:07:12.850 WARN 21251 --- [AO2Q06fYCALSA-6] osarlistener.BlockingQueueConsumer:无法声明队列:springCloudBus.anonymous.FGZPCPqzTAO2Q06fYCALSA 2018-03-27 09:07:12.851错误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 .lang.Thread.run(Thread.java:844)由以下原因导致:org.springframework.amqp.rabbit.listener.BlockingQueueConsumer $ DeclarationException:无法声明队列:[springCloudBus.anonymous.FGZPCPqzTAO2Q06fYCALSA]在org.springframework上。位于org.springframework.amqp.rabbit.listener.BlockingQueueConsumer的amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:621)。

引起原因:com.rabbitmq.client.ShutdownSignalException:通道错误;协议方法:#method(回复代码= 404,回复文本= NOT_FOUND-虚拟主机'/'中没有队列'springCloudBus.anonymous.FGZPCPqzTAO2Q06fYCALSA',类别ID = 50,方法ID = 10)

[省略公共帧]原因:com.rabbitmq.client.ShutdownSignalException:通道错误;协议方法:com.rabbitmq上的#method(回复代码= 404,回复文本= NOT_FOUND-虚拟主机'/'中没有队列'springCloudBus.anonymous.FGZPCPqzTAO2Q06fYCALSA',vhost'/',class-id = 50,method-id = 10)。 client.impl.ChannelN.asyncShutdown(ChannelN.java:505)

[省略共同的框架]

2018-03-27 09:07:12.852错误21251 --- [AO2Q06fYCALSA-6] osarlSimpleMessageListenerContainer:停止中止消费者的容器2018-03-27 09:07:12.853 INFO 21251 --- [AO2Q06fYCALSA-6] osarlSimpleMessageListenerContainer:等待供工人完成。2018-03-27 09:07:12.853信息21251-[AO2Q06fYCALSA-6] osarlSimpleMessageListenerContainer:成功地等待工作人员完成。

  • 我的理解是,使用现有代理的配置客户端的错误描述,侦听器尝试重新连接,但队列丢失。默认情况下进行3次重试。这是预期的,因为我们正在处理Rabbit MQ服务关闭并在没有持久数据的情况下重新启动的情况。问题是重新连接失败。我从许多文章中知道,提到我们必须使用admin才能重新声明队列。为此,我们创建了一个XML配置文件,该文件创建了声明admin和其他内容的属性bean。

问什么?-如果默认情况下所有这些都得到照顾,那将是理想的选择吗?**另外,我仍然没有有效的解决方案。需要帮忙”

加里·罗素

我刚刚使用Boot 2.0和Finchley.M9(总线2.0.0.M7)进行了测试,没有问题...

2018-03-27 13:25:06.125信息36716 --- [main] csbrpRabbitExchangeQueueProvisioner:声明入站队列:springCloudBus.anonymous.tySvAS8BSpS7OtQ_VCeiVQ,绑定到:springCloudBus

...

2018-03-27 13:26:38.220错误36716-[[127.0.0.1:5672] osarcCachingConnectionFactory:通道关闭:连接错误; 协议方法:#method(回复代码= 320,回复文本= CONNECTION_FORCED-代理强制关闭连接,原因为“关机”,类ID = 0,方法ID = 0)

2018-03-27 13:26:58.757信息36716 --- [pS7OtQ_VCeiVQ-6] osarcCachingConnectionFactory:尝试连接到:[localhost:5672]

2018-03-27 13:26:58.761信息36716-[[pS7OtQ_VCeiVQ-6] osarcCachingConnectionFactory:创建的新连接:rabbitConnectionFactory#52c8295b:5 / SimpleConnection @ 74846ead [delegate = amqp://[email protected]:5672 / ,localPort = 49746]

2018-03-27 13:26:58.762信息36716-[pS7OtQ_VCeiVQ-6] osamqp.rabbit.core.RabbitAdmin:自动声明一个非持久,自动删除或专有队列(springCloudBus.anonymous.tySvAS8BSpS7OtQ_VCeiVQ)持久性:false,自动删除:true,排他性:true。如果连接工厂处于活动状态,则代理将停止并重新启动,它将被重新声明,但是所有消息都将丢失。

重新建立连接后,RabbitExchangeQueueProvisioner显式设置一个RabbitAdmin以重新声明队列。

我将尝试使用旧版本...

编辑

引导1.5.10和Edgware.SR3(总线1.3.3.RELEASE)的结果相同。

编辑2

与1.3.1总线启动器(在1.2.1流兔子中带来)相同的结果。工作正常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

删除并重新创建索引

在手动删除RabbitMQ之后重新创建队列

Java:删除并重新创建对象

删除大分区并重新创建

Laravel Sync会删除并重新创建吗?

dbwriteTable()似乎删除并重新创建表

销毁并重新创建jQuery数据表

删除并重新创建表(锁定)

Github用法:删除并重新创建fork?

拖放并重新创建约束脚本

重新创建数据库容器时,Debezium源任务无法重新连接到PostgreSQL数据库

重新创建listview适配器还是清除并重新填充更好?

当Component重新渲染时,函数对象是否被完全删除并重新创建?

TCP连接:重新创建已关闭的套接字

如何在代码优先迁移中强制删除并重新创建选定表?

按字母顺序对DIV排序而不破坏并重新创建它们?

重复复制特定模式的文件并重新创建文件夹层次结构

权限关闭并重新创建活动后没有更新视图

Terraform(0.12.29)导入无法正常工作;导入成功,但计划显示销毁并重新创建

擦拭USB闪存驱动器并重新创建文件系统

修改并重新创建R中的data.frame列表

在MYSQL表上拖放并重新创建索引,会提高性能吗?

清除并重新创建视图后,Scrollview和OnClick处理程序不起作用

暂停计时器而不会销毁并重新创建-Android

Oracle Sequence更改currval为什么不只是删除它并重新创建?

清除导航返回堆栈并重新创建活动

tail -f,但在删除并重新创建文件后(未附加)

删除并重新创建配置单元外部表,但未显示数据

SwiftUI-可选的计时器,重置并重新创建