ice 服务集群配置说明

本文档详细介绍了ICE服务集群的配置,包括slice语言的基础概念,如接口、异常、类的定义,以及服务端的objectadapter、servant和identity。接着讨论了icebox,一个ICE程序框架,用于统一管理多个服务,并提供了服务解耦和性能优化的优势。然后阐述了icegrid的结构和工作原理,强调了registry和node的角色以及服务的部署流程。最后,通过示例展示了直接连接和间接代理模式的区别以及配置方法。
摘要由CSDN通过智能技术生成

一、the  slice  language

  1. 基础类型的string 对应于c++里的std::string
  2. module对应与c++的namespace,注意首字母大写
  3. 可以定义常量 const string aa="aaa";
  4. 自定义类型 struct 中只包含基础类型成员.
  5. interface

    • interface主要用于client的调用,所以应该只含有操作,不能定义类型,异常和数据成员。
    • 参数中从client到server是input参数,从server到client是output参数。
      interface CircadianRhythm {
      void setSleepPeriod(TimeOfDay startTime, TimeOfDay stopTime);
      void getSleepPeriod(out TimeOfDay startTime,out TimeOfDay stopTime);
      };
    • 如果同时存在入参和出参,则出参排入参后
      void getSleepPeriod(TimeOfDay startTime,out TimeOfDay stopTime);
      当有多个出参时,可以封装到一个结构中,返回值为void.
    • 不存在既是入参也是出参的参数。
    • interface中的操作不允许重名。
    • nonmutating 表示只读操作,idempotent表示多次执行此操作不会改变server的状态.
      为了更积极的容错,建议加这两个关键字(http://blog.csdn.net/biexf/article/details/6087441)
      
      interface Clock
              {
                      nonmutating TimeOfDay getTime();
                      idempotent void setTime(TimeOfDay time);
              };
    • interface支持继承,多继承
      interface a extends b,c {}; //从b,c中继承的操作不能有重名
      所有interface的公共base interface是 Object。interface与 产生的Prx相关联的,ObjectPrx是所有proxy的基类,
      例:ClockPrx的基类是ObjectPrx,slice2cpp中生成的类的公共基类是::Ice::Object
      
    • proxy中含有指针语义,所以可以定义自引用接口
      interface Link {
          idempotent SomeType getValue();
         idempotent Link* next();
      };
      The Link interface contains a next operation that returns a proxy to a Link interface. Obviously, this can be used to create a chain of interfaces; the final link
      in the chain returns a null proxy from its next operation.

  6. exception
    分为 用户自定义异常 和 运行时异常.
  • 用户自定义异常。 自定义异常支持继承
    exception ErrorBase {
    string reason;
    };
    enum RTError {
    DivideByZero, NegativeRoot, IllegalNull /* ... */
    };
    exception RuntimeError extends ErrorBase {
    RTError err;
    };
    抛出异常
    interface Clock {
        idempotent TimeOfDay getTime();
        idempotent void setTime(TimeOfDay time)  throws RangeError, Error;
    };
  • Ice::Exception 是所有异常类的基类,用户自定义异常的基类Ice::UserException., 运行时异常Ice::LocalException

7.  在服务端一个objectadapter占用一个端口,在每个objectadapter中可以放置多个servant. 每个servant都可独立完成不用的功能. 每个一个servant都有唯一一个identity (一个字符串)作为标识。所以客户端产生一个指定具体功能的proxy 需要提供identity, 协议类型,监听ip和 监听端口,如:SimplePrinter:tcp -h 10.3.18.163 -p 10000。此proxy主要表示server的资源,所以即使在其它机器上通过此proxy调用,结果一致。对proxy的打印 :clock -t:tcp -h 10.3.18.163 -p 10000

8.  client和server在进行数据交互,除了基本数据,用户定义数据类型外,还可以是proxy, 在获取某个servant的proxy后,可以直接进行对该servant的方法的调用,参见test2

9.   class

  • class 允许成员为空,struct不可已。当class中只包含成员变量时,作用与struct相同,但class优点是可以继承。class 只支持单继承,struct不支持。
    class 中可以有操作,struct不可已。class支持自引用.
     建议少用class 除非有必要理由,用class会消耗更多的资源。若在在开发中尽量用struct+interface来搞定问题,除非有足够的里有用class

二、 icebox

  1. 一个ice 程序框架。用一个icebox server同一管理多个icebox服务,有点如下:
    • 被同一IceBox加载的Ice服务可以通过配置来获得Ice性能优化的好处,举个例子:如果一个应用是另外一个Ice服务的Client,同时client和server都在同一个IceBox里被配置,那么客户端和服务端之间的执行可以获得优化;
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值