Springboot 实现Redis消息队列

Springboot 实现Redis消息队列Springboot 实现 Redis 消息队列之前被面试官问到怎么实现 Redis 的消息队列 我人麻了 当时一个劲的摇头 娘的 欺负我那时知识少 恶心啊 最近看到一个 Demo 然后随笔记录了一篇 以便记录自己的成长过程 一 废话不多 bb 直接上干货 1 IDEA 新建一个 Springboot 工程 取名为 RedisQuene2 导入依赖 dependencies dependency groupId org sprin groupId dependency dependencies

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.1 database: 0 port: 6379 jedis: pool: max-active: 256 max-idle: 8 min-idle: 1 server: port: 8080 tomcat: uri-encoding: utf-8 

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

@Configuration public class RedisConfig { 
    @Autowired private RedisConnectionFactory redisConnectionFactory; @Bean public 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-05 private static final int TIME_OUT=10; @Resource private RedisTemplate redisTemplate; @Override public void produce(String string) { 
    redisTemplate.opsForList().leftPush(MESSAGE_KEY, string); } @Override public 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 @Override public 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 { 
    @Resource private 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 

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216535.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午11:38
下一篇 2026年3月18日 上午11:38


相关推荐

  • linux expect 字符串,expect spawn、linux expect 用法小记

    linux expect 字符串,expect spawn、linux expect 用法小记使用 expect 实现自动登录的脚本 网上有很多 可是都没有一个明白的说明 初学者一般都是照抄 收藏 可是为什么要这么写却不知其然 本文用一个最短的例子说明脚本的原理 脚本代码如下 1 usr bin expect2setti lusername192 168 1 14expect password 5send ispass r 6i

    2026年3月17日
    2
  • ❤️肝下25万字的《决战Linux到精通》笔记,你的Linux水平将从入门到入魔❤️【建议收藏】

    ❤️肝下25万字的《决战Linux到精通》笔记,你的Linux水平将从入门到入魔❤️【建议收藏】文章目录操作系统的发展史UnixMinixLinux操作系统的发展Minix没有火起来的原因Linux介绍Linux内核&发行版Linux内核版本Linux发行版本类Unix系统目录结构Linux目录用户目录命令行基本操作命令使用方法查看帮助文档helpman(manual)tab键自动补全history游览历史命令行中的ctrl组合键Linux命令权限管理列出目录的内容:ls显示inode的内容:stat文件访问权限修改文件权限:chmod修改文件所有者:chown修改文件所属组:chgrp文件.

    2022年6月1日
    30
  • MATLAB安装后出现“License Manager Error -8?”,如何解决?

    MATLAB安装后出现“License Manager Error -8?”,如何解决?解决方法 将激活成功教程文件夹 crack bin win64 里的 4 个复制来替换 bin win64 的文件 就 ok 了网址 教你高效且优雅的访问国外的网站 点击此处

    2026年3月19日
    3
  • 微信小程序开发实战1 微信小程序开发概述

    微信小程序开发实战1 微信小程序开发概述1.微信小程序开发概述1.1微信小程序的特点微信小程序是微信平台提供的一种开放技术,微信小程序为企业用户服务,用于建立一种移动端的“轻应用”,这种应用是不需要下载安装即可使用的应用,用户扫一扫或者搜一下即可打开应用。用户也不用关心是否安装了太多应用的而造成手机空间不足问题。微信小程序的推出后,与订阅号、服务号、企业号并列成为微信的企业应用体系。图1-1微信公众平台产品类型微信小程序运行在微信平台之上,微信平台对不同的手机平台已经做了兼容。使用微信小程序开发的应用,不需要兼容多个平台,开发完成后可

    2022年7月16日
    34
  • IDEA2019.2.4从安装到卸载

    IDEA最近不知怎么了,更新后各种问题。从2019.2.X开始就各种问题,最近出新版本了,然后下载尝试了下,发现maven依然很多问题。最终只能重新安装旧版(2019.1.4)。新版本表现的症状有,maven无提醒,CPU占用率高…

    2022年3月13日
    57
  • 一图了解群环域「建议收藏」

    一图了解群环域「建议收藏」一图了解群环域最近Nickname4th.qicp.vip暂时挂掉了,所以先在这里发一下就群环域的联系做了一个简图,并不全面但是足以应付密码学的要求。网上看了很多教程,但是讲得最清晰最有联系性的文章私以为是这篇:http://sparkandshine.net/algebraic-structure-primer-group-ring-field-vector-space/这位博主…

    2022年6月18日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号