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

本文介绍了一个基于OSGi框架和.NET Remoting技术的分布式系统实现案例。具体包括了多OSGi引擎间的交互原理、分布式服务配置及其实现过程,并提供了具体的XML配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

  1. 当请求某个接口时(也就是要获取某Service Instance时),OSGI通过remoting连接到提供这个服务的url上,如:tcp://localhost:8888/OSGI
  2. 连接成功后,源OSGI发送OpenService命令,让目标OSGI注册TCP Channel
  3. 根据接口type、dll路径、appdomain name,在某个AppDomain中执行解析接口,然后连接到目标OSGI新开的服务上(AppDomain.DoCallBack)
  4. 在配置上,除了上篇文章中的模块配置信息外,在Manifests.xml文件中也加入了分布式服务配置,如下:
  5. Manifests.xml
  6. <?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>//这个代表:当前宿主没有模块承载,但是能和其他宿主通信,达到转发的目的

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

  7. <?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。。。。这样事务就一下子集成了。

 

 

 代码下载

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值