springboot+redission消息队列应用探索

Redis 消息队列实践
本文介绍如何利用 Redis 的 List 数据结构实现消息队列,包括消息的发送、接收及阻塞读取等功能,适用于分布式系统中的异步处理、应用解耦和限流削峰场景。

在分布式系统中必备的一个中间件就是消息队列,通过消息队列对服务与服务间进行异步处理、应用解耦、流量削峰,常用的消息中间件有rabbitmq、rocketmq、kafka等。
消息队列是一种异步的服务间通信方式,适用于分布式或微服务架构中,消息在被处理之前一直存储在队列上。如消息队列被用于分离重量级处理、缓冲或批处理工作或缓解高峰期工作。

3个节点
producer:消息生产者,负载生产和发送消息到broker;
boroker:消息处理中心,负责消息存储、确认、重试等,一般其中会包含多个queue;
consumer:消息消费者,负责从broker中获取消息,并进行相应处理;
3个典型应用场景
异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间;
应用解耦:发送方和接收方之间不需要了解双方,只需要约定消息,多应用间通过消息队列对同一消息进行处理,避免调用接口失败而导致整个过程失败;
限流削峰:应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉;
3个典型特性
消息有序性:消息是异步处理的,但消费者需要按照生产者发送消息的顺序来消费,避免出现后生产的消息被先消费;
重复消费处理:生产者可能因为网络问题出现消息重复生产导致消费者可能会消费到多条重复消息;
可靠性:当生产消息时消费者未消费,消息队列会保留消息,直到消费成功。

redis作为分布式系统中必备的缓存中间件,那么可以应用消息队列吗?
下面使用redis中list数据类型进行分析
redis的列表list是一种线性的有序结构,可以按照元素被推入列表中的顺序来存储元素,满足先进先出,元素可以是文字数据,也可以是二进制数据。

LPUSH:生产者使用 LPUSH key element[element...] 将消息插入到队列的头部,如果 key 不存在则会创建一个空的队列再插入消息。
RPOP:消费者使用 RPOP key 依次读取队列的消息,先进先出

LPUSH和RPOP可以生产消费,但是存在一个性能风险,生产者向队列中存储消息时,list并不会主动通知消费者及时消费。我们需要写一个while(true)死循

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值