RabbitMQ的学习和使用——保证消息的可靠性投递方案

RabbitMQ的学习和使用——保证消息的可靠性投递方案

Scroll Down

RabbitMQ的学习和使用——相关知识

1.怎么自动删除一直未消费的消息?

TTL:设置一个队列的消息的time to live或者设置消息的time to live
生产者在生产消息的时候:

           AMQP.BasicProperties basicProperties=new AMQP.BasicProperties().builder()
                                                    .deliveryMode(2)//是否持久化 1不持久化 2持久化
                                                    .contentEncoding("UTF-8")
                                                    .expiration("10000")//过期时间 10秒
                                                    .headers(map)//自定义属性
                                                    .build();

生产者在声明队列的时候

            Map<String,Object> arguments=new HashMap<>();
            arguments.put("x-message-ttl",6000);
            channel.queueDeclare(queueName,false,false,false,arguments);

2.死信队列

没有队列能够达到的消息组成的队列
满足死信队列的条件:

1.消息队列
2.消息被reject(消息被拒绝) nack(消息没有应答) requeue为false(消息被拒绝入队)
3.队列达到最大长度,先入队列的会被删除

消息达到死信可以通过死信交换机路由到死信队列进行查看,即自己声明一个死信交换机,通过#号的绑定到死信队列。

3.队列的消息优先级

消费者定义队列的时候设置队列优先级

            //声明队列
            Map<String,Object> arguments=new HashMap<>();
            arguments.put("x-max-priority",10);
            channel.queueDeclare(queueName,false,false,false,arguments);

生产者生产消息定义消息的优先级

 AMQP.BasicProperties basicProperties=new AMQP.BasicProperties().builder()
                                                    .deliveryMode(2)//是否持久化 1不持久化 2持久化
                                                    .contentEncoding("UTF-8")
                                                    .expiration("10000")//过期时间 10秒
                                                    .headers(map)//自定义属性
                                                    .priority(5)//定义优先级
                                                    .build();

4.延迟队列

可以通过死信队列+消息的TTL来做延迟队列

5.消息的保证发送和消费成功

1.消费者回调
消费者对消息进行手工ACK确认,将消息落库和提供回调的API,来保证消息的消费
2.补偿机制
对于生产者来说,可以将消息的发送记录下来落库,然后根据状态来重发,设置重发次数,超过重发次数则进行手工补偿。
对于消费者来说,可以将收到的消息进行落库确认,根据状态设置应答。
3.消息冪等性
消费者在进行消费消息时,如果生产者发送了重复的消息,可以通过重账控制表进行去重到业务消费。
4.消费顺序性
一个队列一个消费者的时候才能保证顺序