当前位置: 首页 > backend >正文

11.消息队列

消息队列

消息队列: 把要传输的数据放在队列中,从而实现应用之间的数据交换

常用功能: 可以实现多个应用系统之间的解耦,异步,削峰/限流等

常用的消息队列应用: Kafka,RabbitMQ,Redis

消息队列分为两种

  • 生产者/消费者模式: Producer/Consumer
  • 发布者/订阅者模式: Publisher/Subscriber

1. 生产者消费者模式

1.1 模式说明

生产者消费者模式下,多个消费者同时监听一个频道(redis用队列实现),但是生产者产生的一个消息只能被最先抢到消息的一个消费者消费一次,队列中的消息由可以多个生产者写入,也可以有不同的消费者取出进行消费处理.此模式应用广泛

1.2 生产者生成消息

# 从管道的左侧写入
127.0.0.1:6379> lpush channel1 msg1
(integer) 1
127.0.0.1:6379> lpush channel1 msg2
(integer) 2
127.0.0.1:6379> lpush channel1 msg3
(integer) 3127.0.0.1:6379> type channel1
list

1.3 获取所有消息

127.0.0.1:6379> lrange channel1 0 -1
1) "msg3"
2) "msg2"
3) "msg1"

1.4 消费者消费消息

# 基于实现消息队列的先进先出原则,从管道的右侧消费
127.0.0.1:6379> rpop channel1
"msg1"
127.0.0.1:6379> rpop channel1
"msg2"
127.0.0.1:6379> rpop channel1
"msg3"
127.0.0.1:6379> rpop channel1
(nil)

1.5 验证队列消息消费完成

# 验证队列中的消息全部消费完成
127.0.0.1:6379> lrange channel1 0 -1
(empty array)

2. 发布者订阅模式

2.1 模式说明

在发布者订阅者Publisher/Subscriber模式下,发布者Publisher将消息发布到指定的频道channel,事先监听此channel的一个或多个订阅者Subscriber都会收到相同的消息。即一个消息可以由多个订阅者获取到 对于社交应用中的群聊、群发、群公告等场景适用于此模式

2.2 订阅者订阅频道

# 另打开一个终端当作订阅者 (也可以多开几个终端当订阅者)
127.0.0.1:6379> subscribe channel2
1) "subscribe"
2) "channel2"
3) (integer) 1
Reading messages... (press Ctrl-C to quit or any key to type command)

2.3 发布者发布消息

# 发布者发布信息到指定频道
127.0.0.1:6379> publish channel2 msg1
(integer) 1  # 订阅者个数

2.4 各个订阅者都能收到消息

# 在另一个打开的终端查看
127.0.0.1:6379> subscribe channel2
1) "subscribe"
2) "channel2"
3) (integer) 1
1) "message"
2) "channel2"
3) "msg1"
Reading messages... (press Ctrl-C to quit or any key to type command)

2.5 订阅多个频道

127.0.0.1:6379> SUBSCRIBE channel2 channel22

2.6 订阅所有频道

127.0.0.1:6379> PSUBSCRIBE *

2.7 订阅匹配的频道

127.0.0.1:6379> PSUBSCRIBE chann*

2.8 取消订阅频道

127.0.0.1:6379(subscribed mode)> unsubscribe channel2
1) "unsubscribe"
2) "channel2"
3) (integer) 0
http://www.xdnf.cn/news/16922.html

相关文章:

  • 2. 字符设备驱动
  • Docker环境离线安装指南
  • 计算机网络:如何将一个C类网络划分成两个子网
  • 35.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--数据缓存
  • Docker-03.快速入门-部署MySQL
  • 【大模型实战】向量数据库实战 - Chroma Milvus
  • Android 之 蓝牙通信(4.0 BLE)
  • CASAtomic 原子操作详解
  • 1.内核模块
  • 攻防世界-web-csaw-mfw
  • IO流-字节流-FileOutputStream
  • 复现YOLOV5+训练指定数据集
  • 关于Web前端安全防御之安全头配置
  • 最新Android Studio汉化教程--兼容插件包
  • Java Stream API 编程实战
  • MySQL 事务原理 + ACID笔记
  • 【C语言】结构体详解
  • 无人机集群协同三维路径规划,采用冠豪猪优化器(Crested Porcupine Optimizer, CPO)实现,Matlab代码
  • Jetpack Compose for XR:构建下一代空间UI的完整指南
  • C++引用:高效安全的别名机制详解
  • 途游Android面试题及参考答案
  • pytorch 安装
  • 机器翻译的分类:规则式、统计式、神经式MT的核心区别
  • 计算用户日活:从数据设计到可视化的全流程(高频场景题)
  • 深入掌握 ExcelJS:Node.js 中强大的 Excel 操作库
  • RAG 知识库实战指南:基于 Spring AI 构建 AI 知识问答应用
  • GaussDB case when的用法
  • 在win上安装最新的X-anylabeling以及sam2来帮助进行全自动追踪标注
  • 多模态后训练反常识:长思维链SFT和RL的协同困境
  • Git 常用命令指南:从入门到高效开发