消息队列原理

一、基本原理

  • 消息队列是一种用于应用程序之间异步通信的中间件技术,其核心原理基于生产者-消费者模型。

二、消息传递模式

点对点(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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值