SpringBoot Redis 发布订阅

1.pom 依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>

2.配置

redis:
        host: 10.5.6.13
        port: 6379
        password: sensetime
        timeout: 10000
        maxIdle: 300
        maxTotal: 1000
        maxWaitMillis: 1000
        minEvictableIdleTimeMillis: 300000  
        numTestsPerEvictionRun: 1024
        timeBetweenEvictionRunsMillis: 30000  
        testOnBorrow: true
        testWhileIdle: true 
 

3.redisConfig

/**
     * 创建任务池,运行线程等待处理redis的消息
     */
    @Bean
    public ThreadPoolTaskScheduler initTaskScheduler() {
        if (null != taskScheduler) {
            return taskScheduler;
        }
        taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(20);
        return taskScheduler;
    }

    // 定义监听渠道,名称为topic1
    @Bean
    public ChannelTopic topic() {
        return new ChannelTopic(topic);
    }
    /**
     * 定义redis的监听器
     * 
     * @return 监听容器
     */
    @Bean
    public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory redisConnectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        // Redis连接工厂
        container.setConnectionFactory(redisConnectionFactory);
        // 设置运行任务的线程池
        container.setTaskExecutor(initTaskScheduler());
        // 使用监听器监听Redis的消息
        container.addMessageListener(new ConsumerRedisListener(), topic());
        return container;

    }
 

4.消费监听器

public class ConsumerRedisListener 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);
    }

}

5.发布-测试

stringRedisTemplate.convertAndSend("faceSearchTopic","hello redis");

6.结果

7.到这步说明已经发布订阅成功。

猜你喜欢

转载自blog.csdn.net/m0_37598953/article/details/85050999