springboot中使用Redis5的Stream实现消息队列

1、关于Redis Stream介绍:(摘自:https://blog.csdn.net/qq_43956758/article/details/109860706)

Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。

简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。

而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。

Redis Stream 的结构如下所示,它有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容:


代码示例:

pom.xml :

往Stream推送消息,2种方式(RedisConnectionFactory 和 StringRedisTemplate) :

使用RedisConnectionFactory :

使用StringRedisTemplate:

增加controller,方便http调用推送消息:

从Stream消费消息:

1、系统启动以后,初始化监听器,实现ApplicationRunner :


2、实现函数接口 StreamListener> ,来自定义消息的消费实现

测试:

1、先通过Redis控制台创建stream以及group。

127.0.0.1:6379> XADD mystream * hello world

"1622102510267-0"

127.0.0.1:6379> XGROUP CREATE mystream group-1 $

OK

2、启动程序后,通过控制台往stream生产消息

127.0.0.1:6379> XADD mystream * name zhongguo

"1583208571017-0"

程序成功的消费了这条消息,日志如下:

2021-05-27 16:32:11.607 [INFO ] [task-1] [com.loong.redis.sub.OrderStreamListener][35] - stream message。messageId=1622104331606-0, stream=mystream, body={name=zhongguo}

通过http往stream生产消息:

http://localhost:8080/redis/stream/sendMessage1

http://localhost:8080/redis/stream/sendMessage2

参考:

https://blog.csdn.net/qq_43956758/article/details/109860706

https://springboot.io/t/topic/1436

你可能感兴趣的:(springboot中使用Redis5的Stream实现消息队列)