【RabbitMq 篇五】-要点概念(优先级、顺序性、消息分发、持久化)

前言

本文介绍RabbitMq几个重要的概念。分别是优先级队列、消息顺序性、消息分发、持久化

 

正文

目录

前言

正文

优先级队列

消息顺序性

消息分发

持久化


 

优先级队列

顾名思义,优先级高的具备优先消费的特权

设置方式是在声明队列的时候设置参数:x-max-priority,代表最大优先级,如果参数设置10,如代码所示:

@Bean
    public Queue priorityQueue() {
        Map<String, Object> map = new HashMap<>();
        //给当前队列配置最大优先级
        map.put("x-max-priority", 10);
        return new Queue(PRIORITY_QUEUE, true, false, false, map);
    }

那么则表示在该队列存在11个级别,从高到低是 10,9,……0。

并且需要在发送消息的时候设置当前消息的优先级,如代码所示:

  amqpTemplate.convertAndSend("priority_exchange", "", order, new MessagePostProcessor() {
                @Override
                public Message postProcessMessage(Message message) throws AmqpException {
                    message.getMessageProperties().setPriority(finalI);
                    return message;
                }
            });

 

需要注意的是,需要在生产者的速度大于消费者的速度,且Broker中有消息堆积的情况下,设置队列及消息优先级才有意义,否则,生产者刚生产一条就被消费者消费了,消息在Broker没有堆积,何谈优先级。

 

 

消息顺序性

 

RabbitMq没有属性设置消息的顺序性,所以在没有前提的情况下说RabbitMq消息的消费具有顺序性是错误的,理想情况下,没有重复消费前提下,生产者发送 msg1、msg2、msg3,那么消费者消费顺序也是msg1、msg2、msg3。

但是这种情况毕竟是理想的,而这种理想情况在实际中很容易会被打破,例如消息丢失,网络原因,异常发生,而且也是在一个生产者和一个消费这的情况,如果多个生产者的话,真的就无法保证哪个消息先到达Broker,也就不能保证顺序。

例举一下情况,打破消费的顺序性。

生产者使用了事务,且触发了回滚,重新补发消息后,顺序可能是错乱的。<

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值