Springboot集成Rabbitmq框架项目启动报错‘in vhost ‘/‘: received ‘300000‘ but current is none‘

1. 报错内容

报错: Channel shutdown: channel error; 
protocol method: #method<channel.close>(
reply-code=406, 
reply-text=PRECONDITION_FAILED - inequivalent arg 'x-message-ttl' 
for queue 'door_queue' 
in vhost '/': 
received '300000' but current is none, 
class-id=50, method-id=10)

这报错内容的意思是:
对于虚拟机‘/’下的队列door_queue,接收到参数x-messsage-ttl=300000,但是当前这个参数为none(也就是没找到这个参数)

2. 服务器查看

  1. 进入对应用户对应vhost下的queue界面,找到报错的队列door_queue
    rabbitmq web界面
  2. 查看队列door_queue的参数(这是已经重新添加了参数的)原本是没有参数x-message-ttl参数的,所以才会报错为none
    队列参数

3. 检查代码

IDEA工具全局搜索相关报错内容中出现的关键词,比如door_queue。发现以下代码:

	//队列名称
    public final static String doorQueue = "door_queue";
    //死信 routingKey
    public final static String deadRoutingKeyDoor = "dead_routing_key_door";
	//死信队列 交换机标识符
    public static final String DEAD_LETTER_QUEUE_KEY = "x-dead-letter-exchange";
    //死信队列交换机绑定键标识符
    public static final String DEAD_LETTER_ROUTING_KEY = "x-dead-letter-routing-key";
	@Bean
    public Queue doorQueue() {
        Map<String, Object> args = new HashMap<>(2);
        // 设置死信的交换机
        args.put(DEAD_LETTER_QUEUE_KEY, dealExchangeDoor);
        //直接设置 Queue 延迟时间 但如果直接给队列设置过期时间,这种做法不是很灵活
        args.put("x-message-ttl", 5 * 1000 *60);
        // 设置死信队列的消费队列
        args.put(DEAD_LETTER_ROUTING_KEY, deadRoutingKeyDoor);
        // 创建死信队列
        return new Queue(RabbitMQConfiguration.doorQueue, true, false, false, args);
    }

这是定义一个新队列,队列绑定一个死信交换机,并指定routing_key,这一步导致项目每次启动会去new一个queue
但是已经存在了一个相同名字的队列door_queue,没有属性x-message-ttl
队列是不可变的;创建它们后,将无法更改它们的属性。所以只能删除队列door_queue

4 解决

以下方法选择其一:

  1. 删除出错的队列,重新运行代码,MQ会自动重新建一个带参队列(推荐)。
  2. 手动在MQ建一个带需求参数的队列。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值