问题描述
生产中的项目原来的人都不在了,但是生产中k8s的预警异常消息不停的发送磁盘超出预警范围,并爆出了此队列的名称,但是无论如何在本地代码中没有找到这个队列,只能根据队列在MQ控制面板中找到关联的exchange,大大影响了问题处理的速度。
尝试本地链接生产解绑该队列,但是尝试失败,爆出了链接异常:reply-code=405, reply-text=RESOURCE_LOCKED
排它队列
exclusive:是否排外的,有两个作用,
一:当连接关闭时connection.close()该队列是否会自动删除;二:该队列是否是私有的private,如果不是排外的,可以使用两个消费者都访问同一个队列,没有任何问题,如果是排外的,会对当前队列加锁,其他通道channel是不能访问的,如果强制访问会报异常(reply-code=405, reply-text=RESOURCE_LOCKED)。
spring.gen队列的由来
排查过程中,无法链接到这个MQ服务队列,因为是排它的这样当磁盘空间达到预警值时,你无法从外部将它解绑。甚至你无法根据这个队列名去找源码,因为它是随机生成的,业务代码中没有显式的名称。
只能根据交换机名称去查找,这里我很久没找到是因为我本地的是最新的源码,这个地方已经在几个月前被其他同事改为了显式的非匿名队列,因此建议项目中不要使用匿名队列。
@Bean
public Queue iotDeviceStatusQueue() {
return new AnonymousQueue();
}