您的位置:首页 > 其它

多模块分布式系统的简单服务访问 - OSGI原形(.NET)

2013-09-12 10:15 239 查看

多模块分布式系统的简单服务访问 - OSGI原形(.NET)

先描述一下本篇描述的适用场景(3台server, 各个模块分布在各个Server上,分布式模块互相依赖、交互的场景):



多个OSIG引擎交互上,使用的是.net remoting实现的,原理:

当请求某个接口时(也就是要获取某Service Instance时),OSGI通过remoting连接到提供这个服务的url上,如:tcp://localhost:8888/OSGI

连接成功后,源OSGI发送OpenService命令,让目标OSGI注册TCP Channel

根据接口type、dll路径、appdomain name,在某个AppDomain中执行解析接口,然后连接到目标OSGI新开的服务上(AppDomain.DoCallBack)

在配置上,除了上篇文章中的模块配置信息外,在Manifests.xml文件中也加入了分布式服务配置,如下:

Manifests.xml



<?xml version="1.0" encoding="utf-8" ?>
<Manifests>
<ServicePort>1000</ServicePort>
<RemoteServiceMap>
<Service TargetIP="127.0.0.1" TargetPort="2000">OrderModule.PublicInterfaces.IOrderProcessor</Service>
</RemoteServiceMap>
</Manifests>//这个代表:当前宿主没有模块承载,但是能和其他宿主通信,达到转发的目的




既有本地模块,又有远程服务依赖时的配置文件



<?xml version="1.0" encoding="utf-8" ?>
<Manifests>
<ServicePort>2000</ServicePort>
<Manifest>D:\documents\visual studio 2010\Projects\OSGIDemo\OrderModule\bin\Debug\Manifest.xml</Manifest>  //本地模块定义
<RemoteServiceMap>
<Service TargetIP="127.0.0.1" TargetPort="3000">LoggingModule.PublicInterfaces.ILog</Service>  //给ILog这个接口提供服务的真正服务在远程server上,是个远程依赖
</RemoteServiceMap>
</Manifests>






<?xml version="1.0" encoding="utf-8" ?>
<Module>
<Name>Order Module</Name>
<Version>1</Version>
<Assembly>OrderModule</Assembly>
<Activator>OrderModule.Activator</Activator>
<RequiredService>LoggingModule.PublicInterfaces.ILog</RequiredService>      //此处的配置没有什么特别的
<ProvidedService>OrderModule.PublicInterfaces.IOrderProcessor</ProvidedService>
</Module>




我的demo(里面有3个Host,宿主):



运行效果:



很好很强大,哈哈,相信以后会更加好。等我把这个重构下,再换上wcf。。。。这样事务就一下子集成了。

代码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: