【编码】利用Redis实现PubSub工具

核心原理:利用Redis的List列表实现,发布事件对应rpush,订阅事件对应lpop

问题一:Redis不是自带Pub/Sub吗?

redis自带的pub/sub有两个问题:

1.如果发布消息期间订阅方没有连到redis,那么这条消息就收不到了,即使重新连接上来也收不到

2.redis内部是用一个线程给所有订阅连接推数据的,V生产> V消费 的情况下还会主动断开连接,有性能隐患。感兴趣的可以多了解一下它的原理。

问题二:要实现怎样一个工具,或者说想要什么样的效果?

效果就是得到一个service对象,这个对象有以下两个重要功能:

1.有个publish方法可以调用,用来灵活地发布消息。想发布什么就发布什么,想给哪个topic发送就给哪个topic发送。

2.可以预定义一些订阅者,定义好当收到某个topic的消息后,该做什么处理。

编码内容

(一)接口定义

第一步要做的就是定义接口,一个是发布接口,我们需要这样一个接口来发布消息,消息内容可以是任何形式的对象

public interface MessagePublisher { /** * 发布消息 * @param topic 主题 * @param msg 消息内容 */ void publish(String topic, Object msg); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppdgz.html