Redis实现不可靠发布/订阅功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis实现不可靠发布/订阅功能相关的知识,希望对你有一定的参考价值。
参考技术ARedis 通过 PUBLISH 、 SUBSCRIBE 等命令实现了订阅与发布模式, 这个功能提供两种信息机制, 分别是订阅/发布到频道和订阅/发布到模式, 本文讨论订阅/发布到频道的实现
如图展示了发布消息到 channel1 后,各个client都会接收到 message
虽然Redis能够实现发布/订阅的功能,但是有如下缺点,所以选用前需谨慎考虑
由于Redis发布/订阅模型存在的缺陷,所以使用前需要考虑如下几点
具体使用还是需要考虑业务场景需求
在目前SpringBoot使用Redis的操作中,官方推荐使用SpringData模块中的 spring-data-redis ,所以下文会以 spring-data-redis 进行
序列化使用的是 GenericJackson2JsonRedisSerializer ,使用这个类可以正确序列化Null的对象.如果使用 Jackson2JsonRedisSerializer ,会将对象序列号成空数组.
简单起见,在这里使用SpringSchedule,周期性发布消息
在订阅程序中,有两个比较重要的类,分别是 MessageListenerAdapter 和 RedisMessageListenerContainer
其中 MessageListenerAdapter 实现 MessageListener 作用是将自定义的消费类进行适配.这个类必须有一个 public 的消费方法,并且方法需要有两个参数,arg1为 channel ,arg2是 Message .原因可以在 MessageListenerAdapter 源码中发现
在 MessageListenerAdapter.onMessage 方法中,通过反射对消费类进行了方法调用,并且方法的参数和顺序进行了硬编码,所以必须在消费类中提供一个public方法
从官方文档中,可以得知 RedisMessageListenerContainer 的作用是用于接收消息后进行分发,并且通过内部的线程池进行异步分发,(也可以使用自定义的线程池和相关失败策略)
启动一个发布者,两个订阅者
以上是关于Redis实现不可靠发布/订阅功能的主要内容,如果未能解决你的问题,请参考以下文章