当前product是以solution的方式进行售卖,可是随着公司业务规模的快速夸张,随之而来的是新客户的产品开发,老客户的产品维护,升级以及修改bug,团队的效能明显降低,为了解决此类问题,必须站在公司战略的统一高度来重构系统。php
荣幸的是,本人在此时加入团队并负责系统架构的升级与重构工做。由于公司在全世界都有客户,并且客户又来自于各行各业,带来的问题就是如何抽离公共业务的同时,又能不影响客户的定制化需求开发?产品团队专一于系统的核心逻辑开发,而一些定制化需求交付给global team 去开发?html
技术没有银弹,目前没有彻底肯定要使用OSGI的方式来实现,由于本人以前使用Spring Cloud & Spring Cloud Alibaba各实现了一种demo, 固然也能够实现咱们的服务化,高可用以及动态扩展。可是在解决插件定制化这块,相对来讲仍是不太熟悉,而后OSGI进入眼帘了。java
OSGI 是 <u>O</u>pen <u>S</u>ervice <u>G</u>ateway <u>I</u>nitiative(开发服务网关协议)。spring
指维护OSGI规范的官方联盟shell
> OSGi Alliance是一个由Sun Microsystems、IBM、爱立信等于1999年3月成立的开放的标准化组织,最初名为Connected Alliance。apache
官方联盟维护的基于JAVA语言的服务规范segmentfault
> 该规范和核心部分是一个框架,其中定义了应用程序的生命周期模式和服务注册。基于这个框架定义了大量的OSGi服务:日志、配置管理、偏好,HTTP(运行servlet)、XML分析、设备访问、软件包管理、许可管理、星级、用户管理、IO链接、连线管理、Jini和UPnP。架构
osgi.org 官方描述:框架
> The Dynamic Module System for JAVAeclipse
通俗讲:使用OSGI实现的程序(Bundle)就是一个插件,能够动态的安装,卸载,启动,中止等等而不须要启动容器。
目前使用最广的两款OSGI 框架:
Apache Felix
> Apache Felix是Apache旗下的一个OSGi框架,项目自己很是成熟,已经被用到了不少其余的项目中,例如Apache Servicemix。它自己提供的服务也是最全的,几乎涵盖了所有的OSGi 4.2的标准。除此以外还提供了一些非标准的功能,例如iPOJO。框架自己很是紧凑,你只须要3个包加一个shell就能够运行了,不管是开发仍是Debug都很是简便。除了Felix,还有两个项目是和OSGi相关的。一个是Apache Felix Karaf,它自己是Felix的一个子项目,但他实际上是封装了Felix提供更高一层的Runtime,例如提供了JAAS。另外一个是Apache Aries,目前还处于起步阶段,它做为Felix的补充,提供OSGi企业级规范,包括JPA、JDBC、JTA、JNDI等等。
Equinox
> Equinox是Eclipse旗下的OSGi框架,自己也被Eclipse采用,是Eclipse注明的PDE开发环境的底层。Equinox自己也是至关的全面的框架,提供的功能不比Felix少多少。可是它功能的分类就稍显混乱,文档和Sample也组织的不是很好。事实上至关Equinox仍是被当作开发Eclipse Plugin的应用较多,若是你要开发一个Web程序,你就会感到它自己的功能和文档不够全面。Equinox最大的优点在于它和Eclipse结合紧密,只要你安装了PDE,你就已经有了Equinox,能够方便的在Eclipse里设置你开发的Bundle,启动、部署等操做也异常简单,并且有专门的Debug界面,你还能要求什么呢? > > 若是你想基于Eclipse开发,Equinox无疑是好选择。但对于新手而言,有时候会搞混Eclipse Plugin与OSGi的关系。
> 因本人好几年没使用Eclipse, 所以带上安装再熟悉一下哈。。。
选择企业版以后,下一步
点击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 啦!!!
IDEA也带有OSGI 开发工具包,let's do it.
这里我选择的是Eclipse Equinox 4.13,download传送门 ,点击下载[equinox-SDK-4.13.zip]
,下载完成以后开始配置。
IDEA(version: ULTIMATE 2019.2
) => File => Settings (搜索OSGI,以下图)
点击 + 添加,选中上一步下载的SDK解压目录
添加成功后,选择OSGI 标签,选择OSGI framework 为咱们配置的Equinox.
> import Bnd/Bndtools projects automatically
指的是将普通的jar包 打包 为OSGI 可用的jar.
点击File => New => Project, 选择Java标签下的OSGI
选择Use Library,点击Create
找到org.eclipse.osgi_3.15.0.v20190830-1434.jar
,选中,效果以下,点击下一步。
填写项目属性
点击Finish。
如上图所示,IDEA 建立的不会帮助咱们生成Activator
以及Manifest.mf
文件。
点击Run => Edit Configurations
点击 + ,选择OSGI Bundles
,添加核心bundles
运行(ss 为查看OSGI运行状态命令)
Eclipse与IDEA开发OSGI,主要是manifast文件的生成过程存在比较大的差别。
至此,咱们使用两种开发工具配置OSGI环境工做就已经完成了,下一节会开发一个基于实战应用的示例。
奔跑的人生 | 博客园 | segmentfault | spring4all | csdn | 掘金 | OSChina | 简书 | 头条 | 知乎 | 51CTO