Java

发布于

AI总结: 本文介绍了在网络波动时,由于匿名队列的排他性导致无法连接,并且该队列因设置为自动删除而被移除的情况。具体错误信息显示无法获得对锁定队列的独占访问权限,以及找不到指定的匿名队列。为了解决这一问题,可以考虑通过指定队列名称的方式进行处理,避免匿名队列的自动创建和删除。 优化建议: 1. 在配置中明确指定队列名称,避免使用匿名队列以减少连接问题。 2. 考虑将队列的排他性设置为false,以允许多个消费者连接。 3. 通过增加重试机制来处理网络波动导致的连接失败。 4. 定期检查和维护RabbitMQ的队列状态,确保队列在网络恢复后能够正常使用。 5. 在应用程序中实现更好的错误处理逻辑,以应对可能出现的资源锁定或队列不存在的异常。

网络波动时因匿名队列的排他性导致无法连接, 队列又因为auto-delete自动删除, 可能通过指定队列名的形式来处理

#method<channel.close>(reply-code=405, reply-text=RESOURCE_LOCKED - cannot obtain exclusive access to locked queue 'springCloudBus.anonymous.xxxxx' in vhost '/', class-id=50, method-id=10)

#method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'springCloudBus.anonymous.xxxxx' in vhost '/', class-id=50, method-id=10)

springCloudBus.anonymous.xxxxx 队列特性:

x-queue-master-locator:	client-local
exclusive:	true  # 排他性
auto-delete:	true # 自动删除

RabbitExchangeQueueProvisioner.doProvisionConsumerDestination

group 参数为空的时候,自动创建匿名的排他队列

spring:
  cloud:
    stream:
      default:
        group: ${spring.application.name}-${spring.cloud.client.ip-address}-${server.port}
      rabbit:
        bindings:
          springCloudBusInput:
            consumer:
              # 为true时,使用‘group’作为配置刷新队列的名称
              queue-name-group-only: true

相关连接

【spring cloud 配置中心 + rabbit mq】网络断连恢复引起的配置无法动态刷新