从基础开始,先来说说OSGi的基本理念。

OSGi通过隔离底层classloader,强制应用在设计的时候就考虑模块化,并且基于白板模式来支持服务的注册与订阅。

在OSGi中,模块可以等价理解为bundle,在bundle的基础上,提供了相应的生命周期的管理。同时,为了在多个bundle之间可以进行友好的合作,提供了内部注册中心,基于白板模式支持了服务的注册与订阅。

还有一些基础的概念,比如:片段、插件依赖、包导入导出、以及远程服务等。

这里只细说远程服务,其余的随便google下就好了。

1.为什么需要远程服务呢?

理由其实很简单,一个系统不会仅仅只需要系统内部可以正常工作,往往还需要和外围系统进行对接。而且,随着负载规模的加大,我们还希望分布式部署,支持各种协议的的通讯等。

2.远程服务的理念?

OSGi的远程服务规范中有相应的描述,如下图:

Framework A与Framework B是2个系统,A发布远程服务,提供了一系列的属性;B引用该远程服务,通过一系列属性进行过滤。A、B之间通过某种传输协议进行通讯。那么B如何找到A呢?答案就是通过外部的注册中心。

如下草图:

目前,对于OSGi的远程服务有两种实现。一种是eclipse的ECF;一种是apache的CXF。这两种基本上都是基于某一种RPC的机制来实现远程服务的。

那么,其实可以看出来,OSGi的远程服务本质上就是一个外部的SOA体系(之前内部的注册中心的服务体系可以理解为一个JVM内部的SOA)。在逻辑层面,外部和内部没有过多的区别,都有注册中心,都是基于白板模式注册与订阅服务。那么,比较大的区别在于远程服务,需要加入新的特性。比如:负载均衡,路由,黑白名单,权重设置,调用统计等治理手段。

远程服务实现的选择?

OSGi没有约束具体的通讯方式,本质上,只需要支持将合适的数据传输到远端,远端可以进行正确的解析并返回响应就可以满足远程服务的基本要求了。那么,根据应用场景,可以选择合适的RPC通讯方式。

现有的实现,包括:webservice,xml-RPC等。性能一般,但是是工业标准,和第三方对接也比较方便。除此之外,还可以尝试dubbo-RPC。当然,dubbo不仅仅是一个RPC框架,还包括一系列的治理功能,而且包含一系列的扩展协议支持,通用的远程服务协议都已经支持。

选择的需要考虑的问题

基本上一个应用迁移到OSGi都会或多或少的遇到classloader的问题,这需要熟悉OSGi的相关机制以及应用的实现机制后才能解决。不过一旦解决,分布式系统的部署与开发就降低了相当多的门槛。

现有的这些,足够了吗?

考虑到和第三方对接的各种场景,以及RPC的使用限制。可以得出一个初步的结论,RPC的远程服务,适合内部系统之间的通讯。和外部系统的通讯需要更通用,更少侵入的方式。目前流行的REST服务很好的满足了这点。

采用http协议,基于已有的有限动词,将指定名词的状态进行合适的切换(其实可以简单的看做是一个有限状态机,不过换了一套更花哨的说法而已)。而这些,不用像RPC一样,服务端服务接口发生变化,需要更新客户端的lib。REST不需要或者只需要提供一个新的url通知到客户端即可。那么,这样一来,在支持OSGi远程服务基础上的vrigo容器的价值就得到体现。

OSGi 学习(一)的更多相关文章

  1. 【Todo】OSGi学习

    经常听到.见到OSGi这个名字.那么就单开一篇文章记录一下对OSGi的学习吧. 主要是做一些概念上面的学习.暂时不打算深入实践. 主要参考:http://www.osgi.com.cn/article ...

  2. OSGI学习总结

    最近的一项研究了解了一下OSGI技术,感觉OSGI尽管有一定的学习难度.可是终于掌握和推广之后将是一项对系统开发比較实用的技术.在此和大家分享一下自己的感悟. 1.什么是OSGI OSGI直译为&qu ...

  3. OSGi学习-总结

    本文是osgi实战一书的前几章读书总结 1.  OSGi简介 Java缺少对高级模块化的支持,为了弥补Java在模块化方面的不足,大多数管理得当的项目都会要求建立一整套技术,包括: 适应逻辑结构的编程 ...

  4. osgi学习

    Bundle可以被动态地安装.启动.停止和卸载.Bundle是服务(Service)和组件(Component)的载体.在OSGi中,每个Bundle都有自己独立于其他Bundle的ClassLoad ...

  5. OSGi 学习(二)

    上一篇说了很多虚的东西,现在说点别的. OSGi系统的独立环境下的项目结构以及启动脚本. 先说项目结构,基于equinox的OSGi容器的项目结构如下所示: bin中定义启动脚本,停止脚本之类的. c ...

  6. OSGi 学习之路(4) - osgi的模块化 java在模块化的局限性

    底层代码可见性控制 Java提供了private,public,protected和package private(无修饰符)这四种访问控制级别,不过这仅仅提供了底层的OO数据封装特性.包这个概念确实 ...

  7. Liferay7 BPM门户开发之38: OSGi模块化Bndtools、Maven、Gradle开发构建入门

    前言 OSGi是目前动态模块系统的事实上的工业标准,它适用于任何需要模块化.面向服务.面向组件的应用程序.Eclipse如此庞大和复杂的插件体系,就是基于OSGi.Liferay也是基于OSGi.OS ...

  8. OSGI.NET 学习笔记--架构篇

    关于osgi.net ,想必大家也听说过,以下是自己在学习osgi.net 过程中整理出来的内容,供大家学习参与使用. 1.  UIOSP 开放工厂框架架构 开放工厂所有插件基于OSGi.NET面向服 ...

  9. OSGI.NET 学习笔记--应用篇

    关于osgi.net ,想必大家也听说过,以下是自己在学习osgi.net 过程中整理出来的内容,供大家学习参与使用. 1.  OSGI.NET 与UIOSP OSGi是Open Service Ga ...

随机推荐

  1. Apache OFBiz 学习笔记 之 服务引擎 一

    概述     服务定义为一段独立的逻辑顺序,当多个服务组合一起时可完成不同类型的业务需求     服务有很多类型,WorkFlow.Rules.Java.SOAP.BeanShell等.java类型的 ...

  2. AutoLayout UITableViewCell 动态高度

    从这里http://www.cnblogs.com/liandwufan/p/4516956.html?utm_source=tuicool 转载过来的 -(UITableViewCell*)tabl ...

  3. Android FragmentActivity+viewpager的使用

    使用场景,打算设计一个“底部菜单栏+其余可滑动的页面”的简单的功能. package com.lanyuweng.mibaby; import android.content.Intent; impo ...

  4. Qt加载网页(加载浏览器插件)和制作托盘后台运行(南信大财务报账看号)

    程序模块要添加QNetWork和QWebKit模块: nuistfinancevideo.h文件: #ifndef NUISTFINANCEVIDEO_H #define NUISTFINANCEVI ...

  5. Tkinter教程之Text篇(3)

    本文转载自:http://blog.csdn.net/jcodeer/article/details/1811348 '''Tkinter教程之Text篇(3)''''''14.自定义tag的两个内置 ...

  6. Codeforces 380 简要题解

    ABC见上一篇. 感觉这场比赛很有数学气息. D: 显然必须要贴着之前的人坐下. 首先考虑没有限制的方案数.就是2n - 1(我们把1固定,其他的都只有两种方案,放完后长度为n) 我们发现对于一个限制 ...

  7. java工程师的标准

    1.技术广度方面至少要精通多门开源技术吧,研究过struts\spring\hibernate等的源码. 2.项目经验方面从头到尾跟过几个大项目,头是指需求阶段,包括需求调研.尾是指上线交付之后,包括 ...

  8. virt viewer Usbredir USB重定向

    编译virt viewer之前执行的configure命令,是没有使能usb-redir相关的功能,virt viewer是否支持usbredir是完全依赖于spice-gtk的. virt view ...

  9. 第三百零七天 how can I 坚持

    快放假了,上班也没啥事,感觉也挺累的.明天基本都走了,收拾收拾,准备明天出发.电脑就不带了. 和她聊的还可以,小样,还想当老师,别离开济南就行,我的未来在哪里啊. 晚上炒了白菜,下了乌冬面,明天上午晚 ...

  10. Java设计模式系列之适配器模式

    适配器模式的定义 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.(就类似于我们充电器的转接头将220V的电压转换成我们的手机端 ...