nodejs redis 发布订阅_太赞了:Spring boot+redis实现消息发布与订阅
一.创建spring boot项目
org.springframework.boot spring-boot-starter-data-redis org.springframework.boot spring-boot-starter-web com.alibaba fastjson 1.2.41
二.编辑yml配置文件
server: port: 7888# 日志配置logging: config: classpath:log/logback.xml level: cn.com.dhcc: info org.springframework: info org.springframework.web: info com.alibaba.nacos.client.naming: errorspring: redis: host: localhost port: 6379 password: ********* database: 1 jedis: pool: max-idle: 8 max-active: 8 max-wait: -1 min-idle: 0 timeout: 5000
三.配置Redis
@Configurationpublic class RedisConfiguration { /** * 实例化 RedisTemplate 对象 * * @return */ @Bean("RedisTemplateS") public RedisTemplate functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate redisTemplate = new RedisTemplate<>(); initDomainRedisTemplate(redisTemplate, redisConnectionFactory); return redisTemplate; } /** * 设置数据存入 redis 的序列化方式,并开启事务 * * @param redisTemplate * @param factory */ private void initDomainRedisTemplate(@Qualifier("RedisTemplateS") RedisTemplate redisTemplate, RedisConnectionFactory factory) { // 如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to // String! redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class); redisTemplate.setHashValueSerializer(fastJsonRedisSerializer); redisTemplate.setValueSerializer(fastJsonRedisSerializer); //redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); //redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); // 开启事务 redisTemplate.setEnableTransactionSupport(true); redisTemplate.setConnectionFactory(factory); } /** * 注入封装RedisTemplate @Title: redisUtil @return RedisUtil @date * */ @Bean(name = "redisUtils") public RedisUtils redisUtil(@Qualifier("RedisTemplateS") RedisTemplate redisTemplate) { RedisUtils redisUtil = new RedisUtils(); redisUtil.setRedisTemplate(redisTemplate); return redisUtil; }
四.编写RedisUtil消息发布方法
public class RedisUtils { private static final Logger log = LoggerFactory.getLogger(RedisUtils.class); private RedisTemplate redisTemplate; public void setRedisTemplate(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } public void publish(String channal ,Object obj) { redisTemplate.convertAndSend(channal,obj ); }}
五.配置消息监听
@Configurationpublic class RedisMessageListener { /** * 创建连接工厂 * @param connectionFactory * @param listenerAdapter * @return */ @Bean public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter,MessageListenerAdapter listenerAdapter2){ RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); //接受消息的key container.addMessageListener(listenerAdapter,new PatternTopic("phone")); return container; } /** * 绑定消息监听者和接收监听的方法 * @param receiver * @return */ @Bean public MessageListenerAdapter listenerAdapter(ReceiverRedisMessage receiver){ return new MessageListenerAdapter(receiver,"receiveMessage"); } /** * 注册订阅者 * @param latch * @return */ @Bean ReceiverRedisMessage receiver(CountDownLatch latch) { return new ReceiverRedisMessage(latch); } /** * 计数器,用来控制线程 * @return */ @Bean public CountDownLatch latch(){ return new CountDownLatch(1);//指定了计数的次数 1 }}
六.消息订阅方法
public class ReceiverRedisMessage { private static final Logger log = LoggerFactory.getLogger(ReceiverRedisMessage.class); private CountDownLatch latch; @Autowired public ReceiverRedisMessage(CountDownLatch latch) { this.latch = latch; } /** * 队列消息接收方法 * * @param jsonMsg */ public void receiveMessage(String jsonMsg) { log.info("[开始消费REDIS消息队列phone数据...]"); try { log.info("监听者收到消息:{}", jsonMsg); JSONObject exJson = JSONObject.parseObject(jsonMsg); User user = JSON.toJavaObject(exJson, User.class); System.out.println("转化为对象 :"+user); log.info("[消费REDIS消息队列phone数据成功.]"); } catch (Exception e) { log.error("[消费REDIS消息队列phone数据失败,失败信息:{}]", e.getMessage()); } latch.countDown(); }}
七.定时消息发布测试
@EnableScheduling@Componentpublic class PublisherController { private static final Logger log = LoggerFactory.getLogger(PublisherController.class); @Autowired private RedisUtils redisUtils; @Scheduled(fixedRate = 5000) public String pubMsg() { User user=new User(1, "尚***", 26,"男","陕西省xxxx市xxxxxx县"); redisUtils.publish("phone", user); log.info("Publisher sendes Topic... "); return "success"; }}
八.测试结果
九.发布对象User实体
public class User implements Serializable { /** * */ private static final long serialVersionUID = 1L; private int id; private String name; private int age; private String sex; private String address; .....................}
感谢阅读 关注小编 获得很多好文。
nodejs redis 发布订阅_太赞了:Spring boot+redis实现消息发布与订阅相关推荐
- 丰巢回应小学生用照片“刷脸”取件;苹果明年或发布四款 5G 手机;Spring Boot 2.2.0 发布 | 极客头条...
快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...
- idea springboot 发布webservice 发布服务_太赞了:Spring boot+redis实现消息发布与订阅...
一.创建spring boot项目 org.springframework.boot spring-boot-starter-data-redis org.springframework.boot s ...
- 太好了 | 这篇写的太好了!Spring Boot + Redis 实现接口幂等性
Hi ! 我是小小,今天是本周的第四篇,第四篇主要内容是 Spring Boot + Redis 实现接口幂等性 介绍 幂等性的概念是,任意多次执行所产生的影响都与一次执行产生的影响相同,按照这个含义 ...
- Spring Boot+Redis+拦截器+自定义Annotation实现接口自动幂等
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 前言 在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求, ...
- Spring Boot Redis 入门
本文,我们基于 Spring Boot 2.X 版本. 1. 概述 在快速入门 Spring Boot 整合 Redis 之前,我们先来做个简单的了解.在 Spring 的生态中,我们使用 Sprin ...
- java+cache使用方法_java相关:Spring boot redis cache的key的使用方法
java相关:Spring boot redis cache的key的使用方法 发布于 2020-8-16| 复制链接 摘记: 在数据库查询中我们往往会使用增加缓存来提高程序的性能,@Cacheabl ...
- Spring Boot Redis缓存
Spring Boot Redis缓存 目录[ 隐藏 ] 1 Spring Boot Redis缓存 1.1 Spring Boot Redis项目设置 1.2 Spring Boot Redis缓存 ...
- 超完整!Springboot整合redis集群(Sentine),spring boot自动配置集成redis集群(Sentine)
1.添加maven依赖 注意maven版本依赖,版本要相互匹配,如不知道如何查看相对应的版本时,可进入博主主页查看博主上一篇博文. <parent><groupId>org.s ...
- spring boot + redis 配置
转:https://blog.csdn.net/jaryle/article/details/81480557 1.引入reids包 spring-boot-starter-redis(springb ...
最新文章
- mysql如何查看事务日记_MySQL日志查看详解
- bzoj千题计划262:bzoj4868: [六省联考2017]期末考试
- [一]RabbitMQ-客户端源码之ConnectionFactory
- Redis学习笔记~是时候为Redis实现一个仓储了,RedisRepository来了
- GARFIELD@01-07-2005
- mysql数据库引擎InnoDB和MyISAM
- cocos creator基础-(五)cc.Component使用
- 说说自动学习,是什么样的境界和体验
- html相册魔方代码,魔方相册制作方法现成的魔方相册代码:
- Java IO流:(十二)NIONIO2简单介绍
- 电商巨头角逐付费会员制,新零售生态或成为决胜关键?
- php对数据进行归一化处理方法,12种数据量纲化处理方式
- 智能微型断路器的功能有哪些?和网关搭配的作用在哪?
- Stata:多元 Logit 模型详解 (mlogit)
- js 正则例子 验证美国电话号码
- /*输入一个字符串,判断其是否为回文。(回文字符串是指从左到右读和从右到左读完全相同的字符)*/
- 09款苹果笔记本图片_简单分辨二手苹果笔记本(MacBook Pro)年份的方法
- 信托专替卖家刷淘宝信用 制造虚假交易赚人
- 仿手机端京东商城html源码_web前端入门到实战:制作仿京东商城-商品列表商品筛选功能...
- 为什么要学python?学习python有哪些好处?
热门文章
- 处理时间_1_对时间列进行加减
- 表的插入、更新、删除、合并操作_19_通过表关联删除记录
- Beautifulsoup 网页表格的解析
- h2 java tcpip_windows下创建h2集群,及java集成详细步骤
- 99.Shell脚本自启程序并监控(实现全自动监控服务)
- SegNet网络简析及caffe工程应用
- NVIDIA DIGITS 5.1-dev学习笔记之安装过程记录:Windows10 x64位系统 、 MicroSoft Caffe Master、CUDA 8.0 、Python 2.7
- 构造IOCTL命令的学习心得-----_IO, _IOR, _IOW, _IOWR 幻数的理解
- AngularJS 的自定义指令
- 《大数据存储:MongoDB实战指南》一1.1 什么是大数据