初识 OSGI
背景
当前product是以solution的方式进行售卖,但是随着公司业务规模的快速夸张,随之而来的是新客户的产品开发,老客户的产品维护,升级以及修改bug,团队的效能明显下降,为了解决此类问题,必须站在公司战略的统一高度来重构系统。
荣幸的是,本人在此时加入团队并负责系统架构的升级与重构工作。因为公司在全世界都有客户,而且客户又来自于各行各业,带来的问题就是如何抽离公共业务的同时,又能不影响客户的定制化需求开发?产品团队专注于系统的核心逻辑开发,而一些定制化需求交付给global team 去开发?
选型
技术没有银弹,目前没有完全确定要使用OSGI的方式来实现,因为本人之前使用Spring Cloud & Spring Cloud Alibaba各实现了一种demo, 当然也可以实现我们的服务化,高可用以及动态扩展。但是在解决插件定制化这块,相对来说还是不太熟悉,然后OSGI进入眼帘了。
OSGI 简介
OSGI 是 Open Service Gateway Initiative(开发服务网关协议)。
指维护OSGI规范的官方联盟
官方联盟维护的基于JAVA语言的服务规范
osgi.org 官方描述:
通俗讲:使用OSGI实现的程序(Bundle)就是一个插件,可以动态的安装,卸载,启动,停止等等而不需要启动容器。
目前使用最广的两款OSGI 框架:
Apache Felix
Equinox
Talk is cheap, Show me the code.
环境安装
Eclipse 版本
访问:https://www.eclipse.org/downloads/ 下载客户端
选择企业版之后,下一步
点击INSTALL,等待安装完成。
创建项目
File => New => Project
选择Plug-in Development => Plug-in Project
填写项目属性(OSGI framework 选择 standard)
点击Next(关注Activator,这个会处理OSGI的start() 和 stop()时调用,相当于我们的main函数)
点击Next(选择Hello OSGI)
点击 Finish
配置环境
选择 Run => Run Configurations
选择OSGI Framework,右键点击
New Configration
选择Bundles(因为默认创建会选择全部Target Platform,在
Eclipse IDE 2019‑09
版本下,直接启动会报错。所以取消所有的选项,只勾选以下就个必须的bundle就足够。)点击
Validate Bundles
验证我们的配置项是否正确。如果显示如上消息,恭喜你,可以点击Run启动OSGI console 啦!!!
OSGI Console 启动
IDEA 版本
IDEA也带有OSGI 开发工具包,let's do it.
配置Framework
这里我选择的是Eclipse Equinox 4.13,download传送门 ,点击下载[equinox-SDK-4.13.zip]
,下载完成之后开始配置。
IDEA(
version: ULTIMATE 2019.2
) => File => Settings (搜索OSGI,如下图)点击 + 添加,选中上一步下载的SDK解压目录
添加成功后,选择OSGI 标签,选择OSGI framework 为我们配置的Equinox.
创建项目
点击File => New => Project, 选择Java标签下的OSGI
选择Use Library,点击Create
找到
org.eclipse.osgi_3.15.0.v20190830-1434.jar
,选中,效果如下,点击下一步。填写项目属性
点击Finish。
如上图所示,IDEA 创建的不会帮助我们生成
Activator
以及Manifest.mf
文件。
OSGI Console 启动
点击Run => Edit Configurations
点击 + ,选择
OSGI Bundles
,添加核心bundles运行(ss 为查看OSGI运行状态命令)
Eclipse与IDEA开发OSGI,主要是manifast文件的生成过程存在比较大的差异。
至此,我们使用两种开发工具配置OSGI环境工作就已经完成了,下一节会开发一个基于实战应用的示例。
[参考2]: https://blog.csdn.net/qq_34248376/article/details/82585930
奔跑的人生 | 博客园 | segmentfault | spring4all | csdn | 掘金 | OSChina | 简书 | 头条 | 知乎 | 51CTO