初识 OSGI

背景

当前product是以solution的方式进行售卖,但是随着公司业务规模的快速夸张,随之而来的是新客户的产品开发,老客户的产品维护,升级以及修改bug,团队的效能明显下降,为了解决此类问题,必须站在公司战略的统一高度来重构系统。

荣幸的是,本人在此时加入团队并负责系统架构的升级与重构工作。因为公司在全世界都有客户,而且客户又来自于各行各业,带来的问题就是如何抽离公共业务的同时,又能不影响客户的定制化需求开发?产品团队专注于系统的核心逻辑开发,而一些定制化需求交付给global team 去开发?

选型

技术没有银弹,目前没有完全确定要使用OSGI的方式来实现,因为本人之前使用Spring Cloud & Spring Cloud Alibaba各实现了一种demo, 当然也可以实现我们的服务化,高可用以及动态扩展。但是在解决插件定制化这块,相对来说还是不太熟悉,然后OSGI进入眼帘了。

OSGI 简介

OSGIOpen Service Gateway Initiative(开发服务网关协议)。

  • 指维护OSGI规范的官方联盟

  • 官方联盟维护的基于JAVA语言的服务规范

osgi.org 官方描述:

通俗讲:使用OSGI实现的程序(Bundle)就是一个插件,可以动态的安装,卸载,启动,停止等等而不需要启动容器。

目前使用最广的两款OSGI 框架:

  • Apache Felix

  • Equinox

Talk is cheap, Show me the code.

环境安装

Eclipse 版本

选择企业版之后,下一步

[插件化开发] 1. 初识OSGI-LMLPHP

点击INSTALL,等待安装完成。

创建项目
  • File => New => Project

    [插件化开发] 1. 初识OSGI-LMLPHP

  • 选择Plug-in Development => Plug-in Project

    [插件化开发] 1. 初识OSGI-LMLPHP

  • 填写项目属性(OSGI framework 选择 standard)

[插件化开发] 1. 初识OSGI-LMLPHP

  • 点击Next(关注Activator,这个会处理OSGI的start() 和 stop()时调用,相当于我们的main函数)

    [插件化开发] 1. 初识OSGI-LMLPHP

  • 点击Next(选择Hello OSGI)

    [插件化开发] 1. 初识OSGI-LMLPHP

  • 点击 Finish

    [插件化开发] 1. 初识OSGI-LMLPHP

配置环境
  • 选择 Run => Run Configurations

    [插件化开发] 1. 初识OSGI-LMLPHP

  • 选择OSGI Framework,右键点击New Configration

    [插件化开发] 1. 初识OSGI-LMLPHP

  • 选择Bundles(因为默认创建会选择全部Target Platform,在Eclipse IDE 2019‑09版本下,直接启动会报错。所以取消所有的选项,只勾选以下就个必须的bundle就足够。)

    [插件化开发] 1. 初识OSGI-LMLPHP

  • 点击Validate Bundles 验证我们的配置项是否正确。

    [插件化开发] 1. 初识OSGI-LMLPHP

    如果显示如上消息,恭喜你,可以点击Run启动OSGI console 啦!!!

OSGI Console 启动

[插件化开发] 1. 初识OSGI-LMLPHP

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,如下图)

    [插件化开发] 1. 初识OSGI-LMLPHP

  • 点击 + 添加,选中上一步下载的SDK解压目录

    [插件化开发] 1. 初识OSGI-LMLPHP

  • 添加成功后,选择OSGI 标签,选择OSGI framework 为我们配置的Equinox.

    [插件化开发] 1. 初识OSGI-LMLPHP

创建项目
  • 点击File => New => Project, 选择Java标签下的OSGI

    [插件化开发] 1. 初识OSGI-LMLPHP

  • 选择Use Library,点击Create

    [插件化开发] 1. 初识OSGI-LMLPHP

    找到org.eclipse.osgi_3.15.0.v20190830-1434.jar,选中,效果如下,点击下一步。

    [插件化开发] 1. 初识OSGI-LMLPHP

  • 填写项目属性

    [插件化开发] 1. 初识OSGI-LMLPHP

    点击Finish。

    [插件化开发] 1. 初识OSGI-LMLPHP

    如上图所示,IDEA 创建的不会帮助我们生成Activator以及Manifest.mf文件。

OSGI Console 启动
  • 点击Run => Edit Configurations

    [插件化开发] 1. 初识OSGI-LMLPHP

  • 点击 + ,选择OSGI Bundles,添加核心bundles

    [插件化开发] 1. 初识OSGI-LMLPHP

  • 运行(ss 为查看OSGI运行状态命令)

    [插件化开发] 1. 初识OSGI-LMLPHP

Eclipse与IDEA开发OSGI,主要是manifast文件的生成过程存在比较大的差异。

至此,我们使用两种开发工具配置OSGI环境工作就已经完成了,下一节会开发一个基于实战应用的示例。

[参考2]: https://blog.csdn.net/qq_34248376/article/details/82585930

奔跑的人生 | 博客园 | segmentfault | spring4all | csdn | 掘金 | OSChina | 简书 | 头条 | 知乎 | 51CTO

05-11 17:24