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

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.lryc.cn/news/609371.html

相关文章:

  • IDEA查看源码利器XCodeMap插件
  • LangChain4J入门:使用SpringBoot-start
  • 网络规划与设计5个阶段内容
  • 项目日记---高并发内存池整体框架
  • Python中的sys.path与PYTHONPATH全解析:模块导入路径的底层机制与最佳实践
  • 进阶向:YOLOv11模型轻量化
  • 微店所有店铺内的商品数据API接口
  • AI Competitor Intelligence Agent Team
  • io_getevents 和 io_pgetevents 系统调用及示例
  • 【Mysql】日志--错误日志、二进制日志、查询日志、慢查询日志
  • Linux进程启动后,监听端口几分钟后消失之问题分析
  • RocksDb 是什么?levelDB、LSM 树、SSTable又分别是什么?区别呢?
  • Java,八股,cv,算法——双非研0四修之路day24
  • 2025年测绘程序设计比赛--基于统计滤波的点云去噪(已获国特)
  • 【AI】文档理解
  • 旧笔记本电脑如何安装飞牛OS
  • 嵌入式学习日志——数据结构(一)
  • 渗透高级-----应急响应
  • LLM调研
  • nestjs @Param 从入门到精通
  • 大模型能力测评(提示词请帮我把这个项目改写成为python项目)
  • 数据结构基础 - 平衡二叉树
  • 关于 xrdp远程桌面报错“Error connecting to sesman on 127.0.0.1:3350“的解决方法
  • lua table常用函数汇总
  • 6. 平台总线
  • 模型学习系列之参数
  • 秋招笔记-8.3
  • 关于记录一下“bug”,在做图片上传的时候出现的小问题
  • 验房收房怎么避免被坑?
  • 我的世界进阶模组开发教程——伤害(2)