多模塊分布式系統的簡單服務訪問 - OSGI原形(.NET)


先描述一下本篇描述的適用場景(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。。。。這樣事務就一下子集成了。

 

 

 代碼下載

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM