当前位置: 首页 > article >正文

Redis发布订阅PUB/SUB

Redis发布订阅PUB/SUB是一种消息通信模式,发送者PUB发送消息,订阅者SUB接收消息。Redis客户端可以订阅任意数量的频道,一个通道CHANNEL可以被多个客户端订阅,当一条消息发送到CHANNEL中去后所有订阅的客户端都会接收到此消息。

一、Redis客户端命令
  • 订阅一个或多个频道
SUBSCRIBE channel[channel ...] 
  • 取消客户端对一个或多个频道的订阅
UNSUBSCRIBE [channel [channel ...]]
  • 订阅一个或多个符合给定模式的频道
PSUBSCRIBE pattern [pattern ...]
  • 取消一个或多个符合给定模式的频道的订阅
PUNSUBSCRIBE [pattern [pattern ...]]
  • 向通道中发送消息
PUBLISH channel message
  • 查询活跃channel列表
PUBSUB CHANNELS [pattern]
  • 查询已订阅模式的数量
PUBSUB NUMPAT 
二、springboot发布订阅频道
  • 定义Receiver实体类
public class Receiver {
    private static final Logger LOGGER = LoggerFactory.getLogger(Receiver.class);

    private AtomicInteger counter = new AtomicInteger();

    public void receiveMessage(String message) {
        LOGGER.info("Received <" + message + ">");
        counter.incrementAndGet();
    }

    public int getCount() {
        return counter.get();
    }
}
  • 定义订阅消息通道配置类
@Configuration
public class RedisConfig {

    @Bean
    public String register(RedisMessageListenerContainer factory, MessageListenerAdapter messageListenerAdapter) {
        factory.addMessageListener(messageListenerAdapter, PatternTopic.of("test"));
        factory.addMessageListener(messageListenerAdapter, ChannelTopic.of("test1"));
        return "success";
    }

    @Bean
    public String register1(@Qualifier("test1RedisMessageListenerContainer") RedisMessageListenerContainer factory, MessageListenerAdapter messageListenerAdapter) {
        factory.addMessageListener(messageListenerAdapter, PatternTopic.of("test"));
        factory.addMessageListener(messageListenerAdapter, PatternTopic.of("test1"));
        return "success";
    }

    @Bean
    public MessageListenerAdapter messageListenerAdapter() {
        return new MessageListenerAdapter(new Receiver(), "receiveMessage");
    }
}

上述是基于自定义redis sdk,支持多个RedisMessageListenerContainer

  • 向频道中发送消息
    @GetMapping("send")
    public void send() {
        RedisDbFactory.getStringRedisTemplate().convertAndSend("test", "测试消息");
        RedisDbFactory.getStringRedisTemplate("test1").convertAndSend("test1", "测试消息1");
    }

开源SDK:https://github.com/mingyang66/spring-parent


http://www.kler.cn/a/294596.html

相关文章:

  • AI生活之我用AI处理Excel表格
  • ES6模块、CommonJS、AMD等不同的模块化实现。
  • 行业类别-智能制造-子类别工业4.0-细分类别物联网应用-应用场景智能工厂建设
  • 【go从零单排】通道select、通道timeout、Non-Blocking Channel Operations非阻塞通道操作
  • 一篇Spring Boot 笔记
  • 【异质图学习】异构图神经网络中的自监督学习:基于语义强度和特征相似度的对比学习
  • 04使用python处理交通时空大数据
  • 初识Linux · 进度条
  • K8S 发布应用
  • 【60天备战软考高级系统架构设计师——第十一天:系统集成与测试——集成策略】
  • kafka集群安装
  • OpenFeign的使用(一)
  • 软件测试之UI自动化测试
  • nginx配置中的服务器名称
  • 家政上门小程序系统设计解析
  • C#语言实现最小二乘法算法
  • 怎么强制撤销excel工作表保护?
  • 深度学习从入门到精通——yolov1
  • F12抓包06-1:浏览器导出postman测试脚本
  • sicp每日一题[2.1]
  • docker 容器
  • 数据库 | 子查询 | sql执行顺序 | mysql是否运行
  • AI文献综述神器,有这一款就够了!
  • 《JavaEE进阶》----11.<SpringIOCDI【Spring容器+IOC详解+DI介绍】>
  • tcp 流量控制
  • 开发一款通过蓝牙连接控制水电表的微信小程序