Redis实现订阅通知

发布订阅功能是一个普遍的需求,消息队列也可以进行该功能的实现,这里展示redis怎么实现订阅通知。

1.建立一个任务池

/** 任务池 **/
@Bean
public ThreadPoolTaskScheduler initTaskScheduler() {
    ThreadPoolTaskScheduler taskPool = new ThreadPoolTaskScheduler();
    taskPool.setPoolSize(20);
    return taskPool;
}

暂时设置为20个任务大小进行测试

2.建立监听容器

/** 监听容器 **/
@Bean
public RedisMessageListenerContainer initRedisContainer(RedisMessageListener listener) {
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(jedisConnectionFactory());
    container.setTaskExecutor(initTaskScheduler());
    //定义监听渠道
    ChannelTopic topic = new ChannelTopic("topic1");
    container.addMessageListener(listener,topic);
    return container;
}

3.建立监听器,需要@Component交给IOC监听容器才能拿到

@Component
@Slf4j
public class RedisMessageListener implements MessageListener {
    @Override
    public void onMessage(Message message, byte[] bytes) {
        //消息体
        String body = new String(message.getBody());
        //渠道名称
        String topic = new String(bytes);

        log.info("接收到消息:{}",body);
        log.info("由{}渠道发送而来",topic);
    }
}

4.测试

@GetMapping("/listener")
public String testListener() {
    redisTemplate.convertAndSend("topic1","hello world");
    return "发送完毕";
}

到此显示已经可以正常的通信了,但是当服务器没启动时,在redis控制台publish topic1 msg,在启动服务并不会通知,即消息的可靠性并不确定,相对而言还是更推荐使用消息队列

猜你喜欢

转载自blog.csdn.net/New_CJ/article/details/85246737