业务间事件通知到订阅推送——从单机到集群

来源:互联网 发布:mac pro文件怎么删除 编辑:程序博客网 时间:2024/05/22 05:04
编程技术栈 2017-11-25 22:16:55

业务间事件通知到订阅推送——从单机到集群

项目业务间通信

在项目开发过程中,经常会使用到线程间或者说业务间的通信,之前多是在单机环境下开发和部署,使用的是Spring的事件通知机制,但在集群环境中就会有一些问题,现在一般都是使用Zookeeper或者Dubbo进行集群开发,使用通知机制进行异步的业务间数据通知,现在介绍一个简单的方法,就是使用Redis的订阅机制进行完成业务间数据通信。

Spring事件通知机制

先简单描述一些Spring的事件,首先通过实例化接口ApplicationListener,并实现onApplicationEvent方法来完成事件的监听,然后调用applicationEventPublisher进行触发事件。这种方式只适合在单机项目环境下,如果跨项目或者说同一个项目分别部署在不同服务器上,这个机制下,当触发某个事件,只能在同一台服务器上监听的方法才会执行,这样就可能会导致数据在集群中不同步,所以集群环境下这个是不可行的。

Redis订阅和发布

从字面意思上可以了解,当你订阅了某个主题(频道),如果向该主题发送消息,你就会收到这个信息。Redis本身就提供这种机制,多个订阅者(多个单机项目)只要订阅了同一台Redis服务器上某个频道,到一个发布者进行向该频道发送消息时,所有的订阅者都会收到该通知消息,进而可以使用该机制进行业务间多实例的消息通知。

开发

在文章《在Maven项目中使用Redis缓存子模块工具类进行集成开发》中已经介绍了如何定义ShardedJedisPool连接池,在此基础上继续初始化JedisPool连接池,代码如下图所示:

业务间事件通知到订阅推送——从单机到集群

初始化JedisPool

然后就可以使用JedisPool获取Jedis对象,调用对象的subscribe和publish来完成订阅和发布的处理,具体代码如下图所示:

业务间事件通知到订阅推送——从单机到集群

订阅和发送工具类方法

工具类开发完成后,就可以在项目中使用了。本次实在之前文章的基础上扩展而来,所有配置文件和Spring加载仍和之前一致。在需要使用订阅或者发布的地方注入RedisUtil方法,然后就可以使用subscribe和publish方法了。值得注意的是,在使用订阅方法时,会进行阻塞,所以一般都是新建个线程,然后把订阅代码放在里面,如下图所示:

业务间事件通知到订阅推送——从单机到集群

订阅频道

说明

截止到目前仍在不断学习中,如有不足之处欢迎指正,如有问题也欢迎交流沟通。如果对你有帮助记得关注编程技术栈哦,会持续为你推荐编程知识,希望与你共同进步~

阅读全文
0 0