基于Spring-DM实现分布式服务框架(DSF)(二)

在上篇分析完了在V 0.7需要干的活后,开始细化其中的实现细节,由于技术细节和之前想的有点不同,在细化的同时也稍做了调整,系统的架构仍然保持不变,在这篇blog中来看看实现每项任务的技术细节,之后就可以进入编码实现阶段了。

1、服务模型

采用OSGi的服务模型,在Spring中使用此服务模型时和Spring-DM中的osgi:service、osgi:reference基本一致,示例如下:

发布服务(将bulletinListAction以jndi的方式发布为dsf服务):

<dsf:service id="BulletinListCommandService" version="1.0" ref="bulletinListAction"
interface="cn.org.osgi.xwork.action.IAction">
<dsf:service-properties>
<prop key="command">LIST</prop>
</dsf:service-properties>
<!--以jndi的方式对外发布-->
<dsf:jndi/>
</dsf:service>

引用服务(引用dsf服务):

<dsf:reference id="extensionRegistry" interface="org.eclipse.core.runtime.IExtensionRegistry" version="[1.0,2,0)" cardinality="1..x" retries="3" timeout="5000">
<dsf:service-properties>
<prop key="command">LIST</prop>
</dsf:service-properties>
<!--以jndi的方式调用远程服务-->
<dsf:jndi/>
</dsf:reference>

关于服务模型所支持的所有spring的配置在之后我会公布相应的xsd文件。

2、服务中心

在查询了memcachedb的相关资料后,感觉目前它的java接口好像还不太好用,决定直接采用memcached,自己来实现存储,由于服务模型信息的数据其实非常的小,而且维护改动的频率并不是那么的高,暂时采用文件方式直接存储,服务中心在注册时将文件存储在共享的空间中,之后将文件解析为服务模型对象,放入memcached,当有更新、删除动作时同样做相应的处理,文件存储以及memcached交互都是比较容易的事,将文件解析为服务模型对象采用xstream完成。

服务中心基于Spring-DM、Webwork-OSGi简单实现。

3、发布服务

使用方法已经在上面示例了,具体实现步骤则为:

提供扩展的spring xml namespace的支持;

编写DSFJNDIExporter class,基于Spring的JNDITemplate实现将spring bean注册到JNDI的过程(要求为在本地启动jndi server,默认采用jboss jnp)。

4、调用服务

这个部分之前分析错误,之前忽略了服务应用端是不知道目标服务的地址的,需要通过分布式缓存查询才可得知,因此不是直接采用Spring的JNDIObjectFactoryBean就可以实现的,需要编写自己的DSFObjectFactoryBean,具体实现步骤为:

提供扩展的spring xml namespace的支持;

编写DSFObjectFactoryBean class,由这个bean来负责调用分布式缓存,查询目标服务地址,由于目前只有JNDI方式,在获取到目标服务地址后仍然通过Spring的JNDIObjectFactoryBean完成剩余工作。

经过上面四步技术实现细节的分析,可以来编码完成V 0.7的实现了。

时间: 2024-10-02 20:14:31

基于Spring-DM实现分布式服务框架(DSF)(二)的相关文章

基于Spring-DM实现分布式服务框架(DSF)(一)

经过上篇分析分布式服务框架的blog后,正式对之前的基于OSGi实现分布式服务框架的系列改名(顺便把分布式服务框架改为使用DSF缩写),因为已经决定基于Spring-DM来实现,为什么呢,而且为什么一定要是Spring-DM,而不直接说Spring呢? 今天是Spring-DM 1.0 release的大好日子,,不容易呀,做了这么久,具体怎么样还没来得及细看,不过之前有用过1.0 m2,已经觉得很不错了,相信1.0 release更不会失望. 在我眼里看来,Spring是个很大的东西,其实DS

基于OSGi实现分布式服务框架历程(二)

在这篇历程中来完成对于JINI的Spike,目标仍然是判断基于JINI实现服务的路由.查找需求的满足度. JINI是由Sun研究院制定的,其目标就是为了实现分布式的服务,所以在很多地方可以看到它和分布式服务框架是有不少重叠之处的,来先看看它对于需求的满足度,最后再来分析做个总结. 1.怎么实现远程的将服务注册到服务中心? 在jini中暂时没有找到远程注册服务到服务中心的方法. jini的服务需要和服务中心部署在同一台机器上,这个倒是可以通过服务管理中心直接将sar格式的服务部署上去,支持服务的动

基于OSGi实现分布式服务框架历程(一)

写完之前的那篇基于OSGi实现服务框架的分析后,决定动手来实现一个基于OSGi的分布式服务框架,而其feature呢,就会遵照之前写的服务框架的要素来实现,根据之前的分析,将这个实现过程分为了三个大的步骤来完成:Spike阶段.实现阶段和测试阶段,Spike阶段用于完成几个关键问题的技术的研究和选型:实现阶段用于完成基于OSGi的分布式服务框架:测试阶段用于判断实现的分布式框架对于应用场景的符合程度.性能的情况. 首先进入Spike阶段,在Spike阶段需要完成服务注册.创建以及服务的proxy

基于 Spring + Dubbo 开发分布式REST服务实战

本课程主要是使用 Spring技术栈 + dubbo 开发一个类似当当的图书电商后台的实战教程. 课程特点: 1.课程的技术体系足够系统.全面以及细致:课程中涉及的主要技术包括: Spring IO (依赖版本管理),Spring Boot(自动化配置,零XML), Spring MVC (RESTful API开发) , Spring Security, Spring Security Oauth(RESTful API安全), Spring Framework(基础框架,服务层开发), Sp

基于OSGi实现分布式服务框架历程(四)

在这个篇幅中将来分析下这个分布式服务框架的服务的生命周期的管理的问题,在分布式服务框架中,支持服务的动态部署.卸载.升级是很关键的,至于服务的生命周期是否需要做到像OSGi那样的动态通知,在这个篇幅中会进行分析,并最终形成这个分布式服务框架的生命周期模型以及到目前为止的服务架构模型. 先来分析下服务的生命周期是否需要做到像OSGi DS的动态通知,这里以服务组件安装为例稍微的说下OSGi DS服务的生命周期模型,在OSGi DS中,当有新的Service Component安装时,首先会检查其是

Dubbo分布式服务框架入门(附工程)

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 目录(?)[+] 要想了解Dubbo是什么,我们不防先了解它有什么用.  使用场景:比如我想开发一个网上商城项目,这个网上商城呢,比较复杂,分为pc端web管理后台,微信端销售公众号,那么我们分成四个项目,pc端网站,微信端网站,还有一个后台服务项目,接口服务项目. 对数据库的操作的相关接口放到接口服务项目,这些接口的实现放在后台服务项目,pc端网站和微信端网站都依赖接口服务项目,调用后台数

分析分布式服务框架

技术是为需求而服务的,分布式服务框架也同样如此,它不是凭空诞生的,也是因为有这样的需求才会有分布式服务框架这么样的东西诞生,在这篇blog中来详细的分析分布式服务框架诞生的原因(其实也是需要用分布式服务框架的应用场景,这里隐含的意思就是并不是什么应用都需要分布式服务框架的).分布式服务框架需要提供的feature以及实现这些feature可选的技术方案. 其实这篇blog应该写在实现分布式服务框架系列blog之前,:),不废话了,来看为什么会需要分布式服务框架,在一个不断发展的大型应用中,系统的

分布式服务框架 Zookeeper -- 管理分布式环境中的数据

安装和配置详解 本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非常简单,下面将从单机模式和集群模式两个方面介绍 Zookeeper 的安装和配置. 单机模式 单机安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个目录如:/home/zookeeper-3.2.2 下,Zookeeper 的启动脚本在 bin 目录下,Linux 下

Zookeeper分布式服务框架例子

由这个定义我们知道zookeeper是个协调系统,作用的对象是分布式系统.为什么分布式系统需要一个协调系统了?理由如下: 开发分布式系统是件很困难的事情,其中的困难主要体现在分布式系统的"部分失败"."部分失败"是指信息在网络的两个节点之间传送时候,如果网络出了故障,发送者无法知道接收者是否收到了这个信息,而且这种故障的原因很复杂,接收者可能在出现网络错误之前已经收到了信息,也可能没有收到,又或接收者的进程死掉了.发送者能够获得真实情况的唯一办法就是重新连接到接收者