JAVA 实现Redis 发布订阅

Redis 发布订阅

发布订阅:消息发布者发布消息消息订阅者接收消息,两者之间通过某种媒介联系起来

例如订杂志,当自己订阅了爱格杂志,每个月会发刊一本。到发布的时候派送员将杂志送到自己手上就能看到杂志内容。只有我们订阅了该杂志才会派送给我们

Redis发布订阅(pub/sub)是一种 消息通信模式 :发送者(pub)发送消息,订阅者(sub)接收消息。

Redis客户端可以订阅任意数量的频道。

订阅/发布消息图:

image

图中可以看出,所需:

1.消息发送者 、 2. 频道 、 3. 消息订阅者

发布订阅机制

  1. 当一个客户端通过 PUBLISH 命令向订阅者发布消息的时候,称这个客户端为发布者publisher
  2. 当一个客户端通过subscribe 或者 PSUBSCRIBE 接收消息时,称这个客户端为 订阅者 subscriber
  3. 为了解耦发布者和订阅者之间的关系,Redis使用了频道channel(频道)作为两者之间的中介,发布者直接把消息发送给channel,而channel负责把消息发送给订阅者,发布者和订阅者之间没有直接的联系,都不知道对方的存在

订阅者1,2,3 订阅了频道channel,当有消息发布给频道时,这个消息就会被发送到三个订阅者客户端

image.png

demo 实现

学习参考链接

引入依赖

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

添加配置文件

spring:
  redis:
    host: 127.0.0.1
    database: 5
    password:
    port: 6379

新建一个监听类,来监听消息

@Component
public class CatListener implements MessageListener {

    @Override
    public void onMessage(Message message, byte[] bytes) {
        System.out.println("我是监听者,我监听到的消息是 " + message.toString());
    }
}

创建一个监听容器

@Configuration
public class CatListenerConfig extends CachingConfigurerSupport {

    /**
     * 消息监听容器
     *
     * @param factory
     * @return
     */
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory factory){
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(factory);
        //订阅一个通道 该处的通道名是发布消息时的名称
        container.addMessageListener(catAdapter(),new PatternTopic("topic"));
        return container;
    }

    /**
     * 消息监听适配器,绑定消息处理器
     *
     * @return
     */
    @Bean
    MessageListenerAdapter catAdapter(){
        return new MessageListenerAdapter(new CatListener());
    }

}

建测试类,测试发布监听

@RestController
public class TestController {
    
    @Resource
    StringRedisTemplate stringRedisTemplate;

    @PostMapping("/test2")
    public void test2(){
        stringRedisTemplate.convertAndSend("topic","测试:消息发布者发布消息");
    }
}

测试结果

image.png

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值