有什么办法在 Java 实现插件化?

GayGayUp · 2024-12-31 14:32:31 · 654 次点击

简单说一下背景:

我的项目是一个 IoT 数据收集平台,对接了非常多不同类型、不同厂家的设备,每种设备之间的通信方式(如 http/tcp/udp/mqtt 等)、协议编解码方式各不相同;

目前的状况是,IoT 数据收集平台(主程序)独立运行;每个类型的设备,都创建一个 springboot 服务(协议服务),实现不同的通信和编解码,协议服务通过 RocketMQ 发送消息,主程序消费消息,实现数据收集;

这样如果单个协议服务死了,也不会影响其他协议服务和主程序,优点是实现简单(当初就是为了快速搭建起来而这样做),缺点就是服务过多(目前协议服务已经有接近 60 个)、难以管理、对服务器资源占用也大;

看了一些开源的 IoT 平台,完善度比较高的:如 Jetlinks ,源码晦涩难懂,放弃了;

所以我想能不能用插件化实现:如使用 pf4j ,写一个简单的插件,里面写好一些编解码的操作,打包成 Jar 包后,对接进主程序,复用主程序的通信模块和数据上报模块。插件部署了就采集、卸载了就停止;

问: 我的这个想法可不可行? 技术上实现难度高不高? 如可行,有没一些开源的项目可供学习参考?

举报· 654 次点击
登录 注册 站外分享
5 条回复  
weenhall5 初学 2024-12-31 15:04:01
osgi
2han9wen71an 小成 2024-12-31 15:04:21
osgi
lolita89201 初学 2024-12-31 15:08:50
楼上说的 osgi 没用过。 但是 java 做插件化非常容易, 定义好统一的接口, 不同的模块都编译成 jar , 然后动态加载 jar 的 class , 用反射的方式去执行接口函数就好了。
matcloud 小成 2024-12-31 15:09:41
Java SPI 了解下,以前给我们平台用这个技术实现过插件系统。
byteLoading 小成 2024-12-31 15:10:48
通过 SPI 机制可以实现,原生支持,阿里的很多开源组件也都用到了,dubbo 、canal 之类的 https://cn.dubbo.apache.org/zh-cn/docsf.7/dev/source/dubbo-spi/ https://juejin.cn/post/7054435670244196359
返回顶部