SpringBoot监听redis订阅监听和发布订阅
前言
我们可以在redis中发布一条订阅到通道中,所有监听了这个通道的都可以收到这个发布的内容!
redis订阅监听配置类

代码如下:
RedisListenerConfig.java
package com.wzq.redis.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.Topic;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
/**
 * @description: redis监听器配置
 * @author: Wzq
 * @create: 2019-12-23 15:47
 */
@Configuration(value = "RedisListenerConfigTopic")
public class RedisListenerConfig {
    //redisTemplate
    @Autowired
    private RedisTemplate redisTemplate;
    //redis连接工厂
    @Autowired
    private RedisConnectionFactory connectionFactory;
    //redis 消息监听器
    @Autowired
    private MessageListener redisMsgListener;
    //任务池
    private ThreadPoolTaskScheduler taskScheduler;
    /**
    *@Description 创建任务池,运行线程等待处理redis消息
    *@Param []
    *@Return org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler
    *@Author Wzq
    *@Date 2019/12/23
    *@Time 15:51
    */
    @Bean
    public ThreadPoolTaskScheduler iniTaskScheduler(){
        if(taskScheduler != null){
            return taskScheduler;
        }
        taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(20);
        return taskScheduler;
    }
    /**
    *@Description 定义Redis的监听容器
    *@Param []
    *@Return org.springframework.data.redis.listener.RedisMessageListenerContainer
    *@Author Wzq
    *@Date 2019/12/23
    *@Time 15:52
    */
    @Bean
    public RedisMessageListenerContainer initRedisContainer(){
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        //redis 连接工厂
        container.setConnectionFactory(connectionFactory);
        //设置运行任务池
        container.setTaskExecutor(iniTaskScheduler());
        //定义监听渠道,名称为topic1
        Topic topic = new ChannelTopic("topic1");
        //定义监听器监听的Redis的消息
        container.addMessageListener(redisMsgListener,topic);
        return container;
    }
}
监听类

RedisMessageListener.java
package com.wzq.redis.config;
import org.springframework.data.domain.Page;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.stereotype.Component;
/**
 * @description: redis监听类
 * @author: Wzq
 * @create: 2019-12-23 15:58
 */
@Component
public class RedisMessageListener implements MessageListener {
    @Override
    public void onMessage(Message message, byte[] pattern) {
        //消息
        String body = new String(message.getBody());
        //渠道名称
        String topic = new String(pattern);
        System.out.println(body);
        System.out.println(topic);
    }
}
发布订阅(有两种方式)
1.使用redis命令行发布
命令:
PUBLISH topic1 hello!


2.使用redisTemplate对象发布
redisTemplate.convertAndSend("topic1","wzq好帅!");
详细代码TestController.java
package com.wzq.redis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @description:
 * @author: Wzq
 * @create: 2019-12-23 16:16
 */
@RestController
public class Test {
    @Autowired
    StringRedisTemplate redisTemplate;
    @GetMapping(value = "/test")
    public void test(){
        redisTemplate.convertAndSend("topic1","wzq好帅!");
    }
}
访问:

接收成功!

SpringBoot监听redis订阅监听和发布订阅的更多相关文章
- php redis pub/sub(Publish/Subscribe,发布/订阅的信息系统)之基本使用
		一.场景介绍 最近的一个项目需要用到发布/订阅的信息系统,以做到最新实时消息的通知.经查找后发现了redis pub/sub(发布/订阅的信息系统)可以满足我的开发需求,而且学习成本和使用成本也比较低 ... 
- redis源码分析之发布订阅(pub/sub)
		redis算是缓存界的老大哥了,最近做的事情对redis依赖较多,使用了里面的发布订阅功能,事务功能以及SortedSet等数据结构,后面准备好好学习总结一下redis的一些知识点. 原文地址:htt ... 
- redis教程(一)-----redis数据类型、基本命令、发布订阅以及持久化
		简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMwa ... 
- Redis事务、持久化、发布订阅
		一.Redis事物 1. 概念 Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他 ... 
- Redis 4.x 安装及 发布/订阅实践和数据持久化设置
		1.或者源码安装包 #wget http://download.redis.io/releases/redis-4.0.6.tar.gz 2.解压源码包 #tar -zxf redis-4.0.6.t ... 
- SpringBoot进阶教程(二十九)整合Redis 发布订阅
		SUBSCRIBE, UNSUBSCRIBE 和 PUBLISH 实现了 发布/订阅消息范例,发送者 (publishers) 不用编程就可以向特定的接受者发送消息 (subscribers). Ra ... 
- SpringBoot Redis 发布订阅模式 Pub/Sub
		SpringBoot Redis 发布订阅模式 Pub/Sub 注意:redis的发布订阅模式不可以将消息进行持久化,订阅者发生网络断开.宕机等可能导致错过消息. Redis命令行下使用发布订阅 pu ... 
- Redis 发布订阅,小功能大用处,真没那么废材!
		今天小黑哥来跟大家介绍一下 Redis 发布/订阅功能. 也许有的小伙伴对这个功能比较陌生,不太清楚这个功能是干什么的,没关系小黑哥先来举个例子. 假设我们有这么一个业务场景,在网站下单支付以后,需要 ... 
- Spring Data Redis实现消息队列——发布/订阅模式
		一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式.利用redis这两种场景的消息队列都能够实现. 定义:生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列, ... 
- redis实现消息队列&发布/订阅模式使用
		在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面做记录. Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性 ... 
随机推荐
- s3cmd的使用
			目录 1. 安装s3cmd 2. 配置s3cmd 3. 使用s3cmd [前言] s3cmd 是用于创建S3桶,上传,检索和管理数据到对象存储命令行实用程序. 本文将指导linux下安装s3cmd程序 ... 
- C语言:虚拟地址 和编译模式
			所谓虚拟地址空间,就是程序可以使用的虚拟地址的有效范围.虚拟地址和物理地址的映射关系由操作系统决定,相应地,虚拟地址空间的大小也由操作系统决定,但还会受到编译模式的影响.这节我们先讲解CPU,再讲解编 ... 
- 【LeetCode】1248. 统计「优美子数组」
			1248. 统计「优美子数组」 知识点:数组:前缀和: 题目描述 给你一个整数数组 nums 和一个整数 k. 如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」. ... 
- ls仅列出当前目录下的所有目录
			ls -d */ -d仅列出目录本身,而不列出其中的内容 *通配符,所有的字符 /目录的标识 
- C++:常量
			/** https://www.runoob.com/cplusplus/cpp-constants-literals.html * 常量: 固定值,一旦定义不能被修改 * 整数常量:可以是十进制.八 ... 
- POJ3662
			poj3662 大意:n个点p条边的无向图,求在删去k条边后使1和n号点联通路径上的最长边最小值. 一开始理解错题意以为是分层图求最短路径,结果写完发现k太大了发现事情没有那么简单(讨厌英语题面!) ... 
- java 日期字符串互相转换
			一.把日期转换成字符串 //获取当前时间 Date date = new Date(); //打印date数据类型 System.out.println(date.getClass().get ... 
- 搭建NodeJS开发环境
			Windows10下搭建NodeJS开发环境 ======================================== 下载 NodeJS 安装包,最好使用LTS长期支持正式版 下载见 如下链 ... 
- WEB安全新玩法 [10] 防范竞争条件支付漏洞
			服务器端业务逻辑,特别是涉及数据库读写时,存在着关键步骤的时序问题,如果设计或代码编写不当就可能存在竞争条件漏洞.攻击者可以利用多线程并发技术,在数据库的余额字段更新之前,同时发起多次兑换积分或购买商 ... 
- 解决org.hibernate.LazyInitializationException的正确姿势
			项目运行过程中,一个报错信息,报错信息如下: org.hibernate.LazyInitializationException: could not initialize proxy [xxx.do ... 
