一、基本原理
- 消息队列是一种用于应用程序之间异步通信的中间件技术,其核心原理基于生产者-消费者模型。
二、消息传递模式
点对点(P2P)模式
- 一个生产者发送消息到队列,一个消费者从队列中获取消息。

发布/订阅(Pub/Sub)模式
- 生产者将消息发布到一个主题,多个消费者订阅该主题并接收消息

三、常见命令
1. Redis Stream
XADD
向 Stream 中添加消息。如果指定的 Stream 不存在,则会自动创建。
XADD mystream * field1 value1 field2 value2
- mystream 是流的名称。
- 表示让 Redis 自动生成消息 ID,也可以指定自定义的唯一 ID。
- field1 value1 field2 value2 是消息体,以键值对形式存储。
XREAD
以阻塞或非阻塞方式获取 Stream 中的消息。
XREAD COUNT 2 STREAMS mystream 0-0
- COUNT 2 表示最多读取 2 条消息。
- STREAMS mystream 指定流名称。
- 0-0 是消息 ID,表示从头开始读取。
XACK
确认消费者已经成功处理了消息。
XACK mystream mygroup message_id
2. StringRedisTemplate.opsForStream()
添加消息
String messageId = stringRedisTemplate.opsForStream().add("streamKey", Collections.singletonMap("field", "value"));
创建消费者组
stringRedisTemplate.opsForStream().createGroup("streamKey", "groupName");
读取消息
List<MapRecord<String, Object, Object>> records = stringRedisTemplate.opsForStream().read(
Consumer.from("groupName", "consumerName"),
StreamReadOptions.empty().count(1).block(Duration.ofSeconds(1)),
StreamOffset.create("streamKey", ReadOffset.lastConsumed())
);
确认消息
stringRedisTemplate.opsForStream().acknowledge("streamKey", "groupName", messageId);
删除消息
stringRedisTemplate.opsForStream().delete("streamKey", messageId);
1250

被折叠的 条评论
为什么被折叠?



