消息队列Redis实现

消息队列

  • 消息队列:存储和管理队列,消息代理
  • 生产者:发送消息到消息队列
  • 消费者:从消息队列获取消息并处理消息

优点

  • 消息队列独立于jvm存在,不依赖jvm内存
  • 消息队列会确保数据安全,会对其中的数据持久化,会在消息头这里要求消费者做确认,消费者没有确认就一直存在

Redis实现方式

redis提供了三种不同的方式实现消息队列

  • list结构:基于list结构模拟消息队列

    • 使用brlush,blpop实现阻塞获取和添加
    • 缺点:无法避免数据丢失,如果刚从队列中取出Redis就宕机了,那么数据就丢失了,只支持单消费者
    • 优点:基于Redis,可以持久化数据,不受限于jvm,满足消息有序性
  • pubsub:基本的点对点消息模型

    • 消费者可以订阅一个或多个channel,生产者向对应channel发送消息后,所有订阅者都能收到相关消息,就实现了多消费者

      subscribe channel[channel] #订阅一个或多个频道
      publish channel msg #向一个频道发送消息
      psubscribe pattern[pattern] #订阅与pattern格式匹配的所有频道
      
    • 缺点:不支持数据持久化,无法避免数据丢失,消息堆积有上限,超出时数据丢失

  • Stream:比较完善的消息队列模型

    • Redis5引入的一种新的数据类型
      在这里插入图片描述
      在这里插入图片描述

    • 消息可以回溯,可以被多个消费者读取

    • 在这里插入图片描述

      但是由于$代表读最新的消息,如果我们处理一条消息的过程中,又有超过一条消息到达消息队列,则下次只能获取最新的那条消息,出现漏读消息的问题

消费者组

基于Stream的消息队列

将多个消费者划分到一个组中,监听同一个队列

  • 消息分流:队列中的消息会分流给组内不同的消费者,从而加快消息处理的速度
  • 消费者组会维护一个标识,记录最后一个被处理的消息,就算redis宕机重启,还会从标识之后读取消息,防止了漏读消息问题
  • 消息确认:消费者获取消息后消息处于pending状态,并存入一个pending-list,处理完成后要通过xack来确认消息,消息确认后才会被从pending-list中移除,防止了消费者获取消息后宕机,导致消息丢失的问题

在这里插入图片描述

一般不需要手动创建消费者,当我们指定一个组去监听消息时,如果他发现组中没有消费者,会自动帮我们创建

在这里插入图片描述

确定消息被处理过了

xack key group id[id……]

Stream类型消息队列的xreadgroup命令特点

  • 消息可回溯
  • 可以多消费者争抢资源,加快消费速度
  • 可以阻塞读取
  • 没有消息漏读风险
  • 有消息确认机制,保证消息至少被消费一次

在这里插入图片描述

相关推荐

  1. springboot redis 实现消息队列

    2024-04-08 10:42:03       30 阅读
  2. 如何用Redis实现消息队列

    2024-04-08 10:42:03       20 阅读
  3. 如何基于Redis实现消息队列

    2024-04-08 10:42:03       8 阅读
  4. Redis 消息队列

    2024-04-08 10:42:03       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 10:42:03       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 10:42:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 10:42:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 10:42:03       18 阅读

热门阅读

  1. Teamcenter 修改缓存文件夹名称及路径的方法

    2024-04-08 10:42:03       23 阅读
  2. css 手写返回箭头

    2024-04-08 10:42:03       10 阅读
  3. 【告警监控】监控,巡检和拨测

    2024-04-08 10:42:03       13 阅读
  4. Unity LayoutRebuilder 强制UI重新布局

    2024-04-08 10:42:03       11 阅读
  5. wpf viewmodel和界面双向通知

    2024-04-08 10:42:03       10 阅读
  6. tx-lcn使用

    2024-04-08 10:42:03       12 阅读
  7. WPF —— FromTo/By动画

    2024-04-08 10:42:03       11 阅读
  8. C#WPF控件Menu详解

    2024-04-08 10:42:03       11 阅读
  9. Springboot启动过程

    2024-04-08 10:42:03       15 阅读
  10. Docker设置时区

    2024-04-08 10:42:03       16 阅读
  11. opencv x86(32位) windows下vs2019编译问题

    2024-04-08 10:42:03       13 阅读
  12. 数据结构 实验报告11

    2024-04-08 10:42:03       12 阅读