首页 > 其他分享 >RabbitMQ高级特性 (限流,TTL, 死信队列)

RabbitMQ高级特性 (限流,TTL, 死信队列)

时间:2023-02-09 22:56:07浏览次数:62  
标签:队列 RabbitMQ 死信 限流 消息 TTL 交换机

1、 消费端限流

Consumer限流机制:

  1,确保ack机制为手动确认。

  2,配置prefeteh参数,每次拉取多少消息,根据自己系统能承受的最大值来定。

读取消息—>手动确认消息—>才能再拉取消息

2、超时配置 TTL

TTL全程 time to live

当消息到达存活时间后,还没有被消费,则会自动清除。

RabbitMQ可以对消息设置过期时间,也可以对整个队列设置过期时间,如果两个都设置的话以较短的为准。

对整个队列设置

    @Bean("bootQueue")
    public Queue bootQueue(){
      // .tll(2000)队列中过期时间为2s return QueueBuilder.durable(QUEUE_NAME).ttl(2000).build(); }

发消息时设置,通过MessagePostProcessor进行后置处理

        MessagePostProcessor messagePostProcessor = new MessagePostProcessor() {
            @Override
            public Message postProcessMessage(Message message) throws AmqpException {
          //消息过期时间为五秒 message.getMessageProperties().setExpiration("5000"); return message; } };

//传入messagePostProcessor参数
rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME,"confirm","test confirm",messagePostProcessor);
 

 

3、死信队列

英文缩写DLX, dead letter Exchange,死信交换机,当消息成为Dead Message后,可以被重新发送到另一个交换机中,这个交换机就是DLX。

 

 

 消息成为死信的三种情况:

1、消息队列到达长度限制

2、消费者拒绝接收消息,basicNack或者basicReject,并且不把消息重新放到交换机中,requeue=false

3、原队列存在消息过期设置,消息达到超时时间未被消费

队列绑定私信交换机:

给队列设置参数 x-dead-letter-exchange 和 x-dead-letter-routing-key

4、延迟队列

延迟队列,即消息进入队列后并不会马上投递给消费者,只有到达指定时间后才会被消费。

需求:1,下单后三十分钟未支付,取消订单,回滚库存。

2,新用户注册七天后,发送短信问候。

实现方式:1,使用定时器扫表,问题:不优雅,有误差

2,延迟队列

 

 

 

RabbitMQ并没有提供延迟队列的功能,但是可以用TTL+私信队列来实现。

 

 

 

5、消息补偿

如果有更高要求的消息可靠性保障,可以用消息补偿机制,简单地说就是把消息写到数据库里。

 

 

 

 

这个图看起来好像很复杂,其实只做到了三件事情:

发消息

收到消息确认
检查比对是不是收到消息了


详细说明消息补偿流程

可以参考下面链接 P34
14_应用问题-幂等性保障_哔哩哔哩_bilibili 

标签:队列,RabbitMQ,死信,限流,消息,TTL,交换机
From: https://www.cnblogs.com/tyleaf/p/17100297.html

相关文章

  • RabbitMQ的4钟交换机模式
    packagecom.imooc.miaosha.rabbitmq;importorg.springframework.amqp.core.*;importorg.springframework.context.annotation.Bean;importorg.springframework.context.......
  • RabbitMQ 消息的可靠投递
    rabbitmq整个消息投递的路径为: produce--->rabbitmqbroker--->exchange--->queue--->consumer 1.1 生产端可靠性在使用RabbitMQ的时候,作为消息发送方希望杜......
  • Kafka、RocketMQ、RabbitMQ的比较总结
    最近学习了Kafka、RocketMQ、RabbitMQ三款消息中间件的原理,本文主要是记录一下Kafka、RabbitMQ、RocketMQ三款中间件之间的区别。下面先对各自的架构进行简单的介绍,然后详......
  • 理论+实践,教你如何使用Nginx实现限流
    摘要:Nginx作为一款高性能的Web代理和负载均衡服务器,往往会部署在一些互联网应用比较前置的位置。此时,我们就可以在Nginx上进行设置,对访问的IP地址和并发数进行相应的限制。......
  • rabbitmq总结思维导图
    思维导图源文件https://files.cnblogs.com/files/assembly--/rabbitmq.zip?t=1675607316......
  • drf之认证,权限,限流
     我们创建一个新的子应用opt```pythonpythonmanage.pystartappopt```注册子应用```pythonINSTALLED_APPS=['django.contrib.admin','django.co......
  • RabbitMQ的使用介绍
    一、RabbitMQ是什么RabbitMQ是一种常用的消息中间件,是基于AMQP协议,采用erlang语言开发的面向消息服务的中间件,是一个独立的系统应用程序,可以管理服务器计算资源和网络通......
  • Linux安装配置RabbitMq
    Linux安装配置RabbitMq安装Erlanghttps://www.erlang.org/downloads安装依赖包yuminstallgccglibc-develmakencurses-developenssl-develautoconfyuminstall......
  • Linux安装配置RabbitMq
    Linux安装配置RabbitMq安装Erlanghttps://www.erlang.org/downloads安装依赖包yuminstallgccglibc-develmakencurses-developenssl-develautoconfyuminstall......
  • Linux安装配置RabbitMq
    Linux安装配置RabbitMq安装Erlanghttps://www.erlang.org/downloads安装依赖包yuminstallgccglibc-develmakencurses-developenssl-develautoconfyuminstall......