在使用springAMQ时,设置消息的优先级

在SpringAMQ中直接设置消息的优先级不会生效,必须为RabbitMQ队列指定x-max-priority参数,设置最大优先级后(不超过255),消息优先级才会按照预期工作,实现高优先级消息优先处理。
摘要由CSDN通过智能技术生成

总结:在使用springAMQ直接设置消息的优先级是无效的,必须先指定队列的最大优先级的情况下优先级才会生效

这是我的rabbitmq队列没设置最大优先级的情况

// 
@Bean
// 这是我的rabbitmq队列没有设置队列最大优先级
public Queue myQueu() {
    Map<String, Object> map = new HashMap<>();
    return new Queue("myqueue", true, false, false, map);
}
//-----------------------------
// 这里我发送了两条消息,注意:setPriority数值越大优先级越大
@Bean
    public ApplicationRunner runner(){
        MessageProperties properties1 = new MessageProperties();
        properties1.getHeaders().put("desc", "描述信息,优先级为0,但先发");
        properties1.setPriority(0);
        Message message1 = new Message("测试message".getBytes(), properties1);

        MessageProperties properties2 = new MessageProperties();
        properties2.getHeaders().put("desc", "描述信息,优先级为9,但后发");
        properties2.setPriority(9);
        Message message2 = new Message("测试message".getBytes(), properties2);


        template.convertAndSend("directExchange", "myBinding", message1);
        template.convertAndSend("directExchange", "myBinding", message2);

        return args -> {};
    }

正常情况下,发消息是先进先出,但这设置了消息优先级,后发的消息优先级更大一些,预期应该是够发消息在上面
在这里插入图片描述
但是和预期的不同,得到的是先进先出的顺序

!!!重要点

@Bean
// 这是我的rabbitmq队列没有设置队列最大优先级
public Queue myQueu() {
    Map<String, Object> map = new HashMap<>();
    // 这行代码很关键,设置最大优先级,注意最大不超过255
    map.put("x-max-priority", 10);
    return new Queue("myqueue", true, false, false, map);
}

设置最大优先级后,注意最大不超过255,最后就得到预习效果了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值