发布于
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