栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring整合Redis应用篇(三、订阅发布)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring整合Redis应用篇(三、订阅发布)

订阅发布模型,工作中应该也是挺常见的,常见的是用MQ去实现,redis也可以简单的实现订阅发布,下文教大家简单的用 spring + redis 来实现一个订阅发布模型。

pom yaml 略,同上文无变化,配置类如下

@AllArgsConstructor
@SpringBootConfiguration
public class RedisPubsubConfig {

    private final RedisConnectionFactory redisConnectionFactory;

    // spring依赖搜索:可以拿到spring容器中所有RedisMessagePublisher的实现类另外还有Map写法,感兴趣的话,大家可以搜索一下相关内容
    private final List redisMessagePublisherList;

    // redis消息监听器容器
    @Bean
    public RedisMessageListenerContainer redisMessageListenerContainer() {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(redisConnectionFactory);
        // 统一注册redis消息监听器
        redisMessagePublisherList.forEach(redisMessagePublisher -> container.addMessageListener(redisMessagePublisher, redisMessagePublisher.subTopic()));
        return container;
    }
}
@SpringBootConfiguration
public class RedisPubsubConfig {

    
    @Bean
    public RedisMessagePublisher redisMessagePublisher() {
        return new RedisMessagePublisher() {
            // 订阅的主题
            private Topic topic = new ChannelTopic("default-topic");
            // 收到消息时的处理器
            private BiConsumer messageHandler = (message, pattern) -> {
                // 简单输出收到的信息
                System.out.println(new String(message.getBody()));
            };

            @Override
            public BiConsumer messageHandler() {
                return this.messageHandler;
            }

            @Override
            public Topic subTopic() {
                return this.topic;
            }
        };
    }
}

public interface RedisMessagePublisher extends MessageListener {
    // 消息处理器,用一个双参的消费型函数式接口来封装
    BiConsumer messageHandler();

    // 订阅的主题
    Topic subTopic();

    // 收到消息时,调用消息处理器来进行处理
    @Override
    default void onMessage(Message message, byte[] pattern) {
        messageHandler().accept(message, pattern);
    }
}

如上配置,便可实现简单的消息发布订阅,然后在controller层实现一个发布消息的接口,调用

redisTemplate.convertAndSend 往default-topic 主题去发布一个消息,订阅该主题的处理器就会调用了

    @GetMapping("/test")
    @ResponseBody
    public String test() {
        redisTemplate.convertAndSend("default-topic", "test message.");
        return "success";
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644934.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号