Springboot 实现Redis 消息队列
之前被面试官问到怎么实现Redis的消息队列,我人麻了,当时一个劲的摇头,娘的,欺负我那时知识少,恶心啊
 最近看到一个Demo,然后随笔记录了一篇,以便记录自己的成长过程。

一、废话不多bb,直接上干货
1、IDEA新建一个Springboot工程,取名为RedisQuene

2、导入依赖

 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency></dependencies>

3、修改 application.yml 配置

spring:redis:host: 127.0.0.1database: 0port: 6379jedis:pool:max-active: 256max-idle: 8min-idle: 1server:port: 8080tomcat:uri-encoding: utf-8

4、新建一个config包,导入Redis配置

@Configuration
public class RedisConfig {@Autowiredprivate RedisConnectionFactory redisConnectionFactory;@Beanpublic RedisTemplate<String, Object> redisTemplate() {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new StringRedisSerializer());template.afterPropertiesSet();return template;}
}

5、新建一个service包,写一个接口

public interface MQService {void produce(String string);void consume();void blockingConsume();}

5、写一个该接口的实现类,实现业务代码

@Service
public class MQServiceImpl implements MQService {private static Logger log = LoggerFactory.getLogger(MQServiceImpl.class);private static final String MESSAGE_KEY = "message:queue";//    blpop 是阻塞式列表的弹出原语。当给定列表内没有任何元素可供弹出的时候, 连接将被 blpop 命令阻塞。
//    直到有另一个客户端对给定的这些 key 的任意一个执行 lpush 或 rpush 命令为止。
//    当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素//brpop超时时间 Jessica 2021-11-05private static final  int TIME_OUT=10;@Resourceprivate RedisTemplate redisTemplate;@Overridepublic void produce(String string) {redisTemplate.opsForList().leftPush(MESSAGE_KEY, string);}@Overridepublic void consume() {String string = (String) redisTemplate.opsForList().rightPop(MESSAGE_KEY);log.info("consume : {}", string);}public void blockingConsume() {List<Object> obj = redisTemplate.executePipelined(new RedisCallback<Object>() {@Nullable@Overridepublic Object doInRedis(RedisConnection connection) throws DataAccessException {//队列没有元素会阻塞操作,直到队列获取新的元素或超时return connection.bLPop(TIME_OUT, MESSAGE_KEY.getBytes());}},new StringRedisSerializer());for (Object str: obj) {log.info("blockingConsume : {}", str);}}}

5、新建一个controller包,controller调用service方法

@RestController
@RequestMapping(value="/api")
public class MQController {@Resourceprivate MQService mQService;@RequestMapping(value = "/produce", method= RequestMethod.GET)public void produce(@RequestParam(name = "key") String key) {mQService.produce(key);}@RequestMapping(value="/consume", method=RequestMethod.GET)public void consume() throws Exception{//第一种,没有参数的Redis 队列,会不停连接,连接失败会自动断开 Jessica 2021-11-05
//            while (true) {//                mQService.consume();
//            }//第二种,即使没有参数,会陷入阻塞阶段mQService.blockingConsume();}}

7、开启windows的Redis,没有安装包可以去官网下载一个,这里要强调一下,Redis是CS架构的,我们下载Redis安装包(必须是Windows版)后,需要先启动Redis,进入Redis安装的根目录,然后输入命令,启动服务端

E:\DevelopTools\redis>redis-server.exe redis.windows.conf

8、然后我们启动RedisQuene工程,在浏览器输入key=1,生产消息

9、在另外一个浏览器窗口消费一个消息

10、在IDEA控制台,我们可以查看消息接收完成,OK

总结:brpop帮助我们在没有数据的情况下,不会陷入重复连接的情况,很好的处理数据的请求。

各位观众老爷们,创作不易,麻烦点赞、关注、收藏,谢谢!

Springboot 实现Redis消息队列相关推荐

  1. springboot整合redis消息队列

    前言 消息队列作为一种常用的异步通信解决方案,而redis是一款高性能的nosql产品,今天就给大家介绍一下,如何使用redis实现消息队列,并整合到springboot. 两个消息模型 1. 队列模 ...

  2. SpringBoot使用Redis消息队列 实现生产/消费者

    文章目录 一.redis 依赖和配置源 二.消费者 2.1.生产者和消息公共的代码 消息队列 key 2.2.redis 消息队列相关配置 1).MsgConsumer 定义公共消息接口 2).Red ...

  3. springboot:整合redis消息队列

    整合redis消息队列 项目依赖 <!-- RedisTemplate --><dependency><groupId>org.springframework.bo ...

  4. redis 消息队列 延时队列

    redis 消息队列 Spring boot 2.0 基于Redis快速实现消息队列pub/sub功能 Springboot+Redis实现消息队列(生产者/消费者.发布订阅模式) SpringBoo ...

  5. Redis消息队列发展历程

    简介:Redis是目前最受欢迎的kv类数据库,当然它的功能越来越多,早已不限定在kv场景,消息队列就是Redis中一个重要的功能.Redis从2010年发布1.0版本就具备一个消息队列的雏形,随着10 ...

  6. Redis 消息队列的三种方案(List、Streams、Pub/Sub)

    现如今的互联网应用大都是采用 分布式系统架构 设计的,所以 消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段,它具有 低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 当前使用较多 ...

  7. 如何保证 Redis 消息队列中的数据不丢失?

    Redis 最常见的业务场景就是缓存读取与存储,而随着时间的推移,有人开始将它作为消息队列来使用了,并且随着 Redis 版本的发展,在 Redis.2.0.0 中新增了发布订阅模式(Pub/Sub) ...

  8. 【Redis消息队列实现异步秒杀】--Redis学习笔记08

    前言 秒杀业务的优化思路: 先利用Redis完成库存余量.一人一单判断,完成抢单业务 再将下单业务放入队列中(阻塞队列,消息队列),利用独立线程异步下单 基于阻塞队列的异步秒杀存在哪些问题? 内存限制 ...

  9. PHP借用Redis消息队列实现高并发下发送邮件功能

    参考: 我目前的做法是,借用redis的队列,把要发送的消息,全部放到里面,然后就不管了 有一个后台发送进程,来处理队列里面的数据 1.如果需要重发,则把发送失败的消息放到一个备份的队列里,每次循环开 ...

最新文章

  1. C#引用C++ Dll 所有類型轉換的方式(转)
  2. qtplaintextedit如何删除内容_(mac常见问题)如何删除 Mac 储存空间的其他选项?...
  3. 视觉注意力机制(上)
  4. 一二三系列之状压DP——Max Correct Set(一)Neko Rules the Catniverse (Large Version)(二)Make It Ascending(三)
  5. 来自顶级名校推荐的英文书单,留着慢慢啃!
  6. Redis——持久化RDB和AOF
  7. 大数据是国家目前急需的技术领域
  8. 计算机视觉应用期末试卷,计算机视觉期末复习
  9. 2018年TI杯大学生电子设计竞赛题C-无线充电电动小车 题目加答案,非常详细
  10. 服务器配置高点网站打开速度,网站打开速度慢,你必须要解决的事?
  11. 币圈投资必败的5种“韭菜”人格
  12. 虚拟资源项目是什么?依靠虚拟资源项目月入万元能实现吗?
  13. Random不出现重复数字
  14. 【web-ctf】ctf_BUUCTF_web(2)
  15. 鸿蒙负责人王成录被曝已离职:华为技术元老,1998年哈工大博士毕业后加入
  16. Focal Loss for Dense Object Detection(整理后转载)
  17. 制作ipad iphone充电线
  18. 麒麟A1手表升级鸿蒙,麒麟A1自研芯片加持,打造年度续航旗舰手表华为WATCH GT 2...
  19. S7-200SMART案例分析——运动控制编程(三)
  20. 王晓昀-PowerDesigner与模型驱动开发-UMLChina讲座-音频和幻灯

热门文章

  1. SSM框架搭建的步骤
  2. Creo文件怎么保存为HTML文件,将Creo装配体的每个部件保存成单独的STP格式 | 坐倚北风...
  3. Python购物车案例(改善)
  4. C++ lambda函数详解
  5. idea 配置多个git账号_IDEA配置git
  6. 微信提示发送视频不能超过25M!这2个简单方法,一键轻松发送
  7. docker安装部署ansible并打包
  8. Spring Cloud | 第二篇:服务消费者(Ribbon)
  9. linux安装kde桌面环境,在Debian 10(Buster)上安装KDE桌面环境的方法
  10. CarSim仿真快速入门(二十一)-CarSim: 车轮箭头动画和其他指示动画