前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【云原生进阶之PaaS中间件】第四章RabbitMQ-4.2-进阶应用

【云原生进阶之PaaS中间件】第四章RabbitMQ-4.2-进阶应用

作者头像
江中散人_Jun
发布2024-02-20 09:13:48
1780
发布2024-02-20 09:13:48
举报
文章被收录于专栏:云原生布道专栏

1 RabbitMQ的高级应用

1.1 死信队列

死信队列(DLX,Dead-Letter-Exchange),利用DLX,当消息在一个队列中变成无法被消费的消息(dead message)之后,它能被重新publish到另一个Exchange,这个Exchange就是DLX。

消息变成死信的几种情况:

1、 消息被拒绝(channel.basicReject/channel.basicNack)并且request=false;

2、 消息在队列的存活时间超过设置的生存时间(TTL)时间;

3、 队列达到最大长度(队列满了,无法再添加数据到队列中)。

DLX也是一个正常的Exchange,和一般的Exchange没有区别,它能在任何的队列上被指定,实际上就是设置某个队列的属性。

死信队列的设置:

1、首先,需要设置死信队列的Exchange和queue,然后进行绑定;

2、然后,我们进行正常声明交换机、队列、绑定,只不过我们需要在队列机上一个参数即可:arguments.put(“x-dead-letter-exchange”,”dlx.exchange”);这样消息在过期、被拒绝、队列在达到最大长度时,消息就可以直接路由到死信队列。

1.2 延迟队列

基于rabbitmq_delayed_message_exchange插件,实现延迟队列效果。它是一种新的交换类型,该类型消息支持延迟投递机制消息传递后并不会立即投递到目标队列中,而是存储在mnesia(一个分布式数据系统)表中,当达到投递时间时,才投递到目标队列中。使用延迟队列,可以有效解决定时任务带来的系统压力以及业务处理时效性等问题。

应用场景:

  • 订单在30分钟之内未支持,则自动取消订单
  • 工单在60分钟之内仍未处理,则发送消息提醒
  • 预定会议室后,在预定时间前10分钟,通知提醒各参会人员
  • ………………………………

1.3 队列幂等性

幂等性的实质是:对于一个资源,不管你请求一次还是请求多次,对该资源本身造成的影响应该是相同的,不能因为重复相同的请求而对该资源重复造成影响。注意关注的是请求操作对资源本身造成的影响,而不是请求资源返回的结果。

MQ消费者的幂等性一般使用全局ID或者写个唯一标识(比如流水号/时间戳/UUID/订单号)来判断该消息是否已消费过,也可以利用redis执行setnx命令,天然具有幂等性,从而实现不重复消费(推荐使用redis)。

1.4 优先级队列

优先级队列,也就是具有高优先级的队列,优先级高的消息具备优先被消费的特权。通过队列的 x-max-priority 参数设置队列的最大优先级,之后在发送消息时通过 priority 属性再设置当前消息的优先级。优先级应在 0 和 255 之间,推荐1 ~ 10。

  • 优先级默认最低为0,最高为队列设置的最大优先级;
  • 对于单条消息来谈优先级是没有什么意义的。假如消费者的消费速度大于生产者的速度且Broker中没有消息堆积的情况下,对发送的消息设置优先级就没有什么意义,因为生产者刚发完一个消息就被消费者消费了,相当于Broker中至多只有一条消息。

1.5 惰性队列

惰性队列会尽可能地将消息存入磁盘中,而在消费者消费消息时才会被加载到内存中,它支持更多的消息存储。

队列具备两种模式:default 和 lazy。默认的为 default 模式,在队列声明的时候可以通过“x-queue-mode”参数来设置队列的模式,取值为“default”和“lazy”。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 RabbitMQ的高级应用
    • 1.1 死信队列
      • 1.2 延迟队列
        • 1.3 队列幂等性
          • 1.4 优先级队列
            • 1.5 惰性队列
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档