ICE系列培训(三)

上传人:我*** 文档编号:134420026 上传时间:2020-06-05 格式:PPT 页数:162 大小:851.50KB
返回 下载 相关 举报
ICE系列培训(三)_第1页
第1页 / 共162页
ICE系列培训(三)_第2页
第2页 / 共162页
ICE系列培训(三)_第3页
第3页 / 共162页
ICE系列培训(三)_第4页
第4页 / 共162页
ICE系列培训(三)_第5页
第5页 / 共162页
点击查看更多>>
资源描述

《ICE系列培训(三)》由会员分享,可在线阅读,更多相关《ICE系列培训(三)(162页珍藏版)》请在金锄头文库上搜索。

1、ICE系列培训 三 鲍齐权qqbao 统一网管平台专项 培训内容 1 ICE运行时2 动态ICE3 连接管理4 FreezeMap 1 1概述 本章主要介绍ICE运行时的一些内部细节 通信器ICE上下文对象适配器连接超时对象标识单向 数据报 批量调用Current对象定位服务Servant自动重试ICE线程模型字符串编码代理插件开发 1 ICE运行时 1 2通信器 通信器Ice Communicator是Ice运行时的主入口点 其实例与一些运行时资源关联在一起 客户端线程池对象适配器服务端线程池配置属性对象工厂日志记录器统计对象缺省路由器缺省定位器插件管理器 1 ICE运行时 1 2通信器 注

2、意 不同通信器的对象适配器以及ICE对象是相互独立的 不同通信器使用其自己的线程池 互不干扰 通常情况下 一个服务器中使用一个通信器即可 某些情况下多通信器更有用 例如 IceBox对每个Ice服务使用不同的通信器这样保证不同服务间互不干扰 1 ICE运行时 1 2通信器 通信器接口 moduleIce localinterfaceCommunicator stringproxyToString Object obj Object stringToProxy stringstr 通信器提供大量接口来操作它所关联的运行时资源 后面介绍各个资源时再介绍 1 ICE运行时 1 3通信器的初始化 在创

3、建通信器时 ICE运行时初始化了一系列通信器特性 这些特性影响通信器的行为 注意 这些特性生命期随通信器生命期一起 通信器创建后就不能更改了 因此 你必须在创建通信器时设置好这些特性 初始化使用Ice initialize函数 namespaceIce CommunicatorPtrinitialize int 1 ICE运行时 1 3通信器的初始化 通信器创建时可以定制下列特性 属性集合 日志接口 状态接口 宽 窄字符集转换器 线程通知hook 分派器 类装载器 仅java 1 ICE运行时 1 3通信器的初始化 要建立这些特性 你需要填充一个InitializationData结构 nam

4、espaceIce structInitializationData PropertiesPtrproperties LoggerPtrlogger StatsPtrstats StringConverterPtrstringConverter WstringConverterPtrwstringConverter ThreadNotificationPtrthreadHook DispatcherPtrdispatcher 1 ICE运行时 示例 运行时属性集可从文件中读取InitializationDatainitData initData properties createPropert

5、ies initData properties load configFile 1 3通信器的初始化 例如 定制一个类型为MyLogger的日志记录器 Ice InitializationDataid id logger newMyLoggerI Ice CommunicatorPtric Ice initialize argc argv id 1 ICE运行时 例如 我们的总线客户端的通信器是在下面所示函数内初始化的 voidCBusClientForRpcClient ClientInit conststring 1 4对象适配器 对象适配器是位于Ice运行时和实际服务提供对象 Serva

6、nt 之间 实现以下职责 1 将Ice对象 培训一 中有介绍什么是Ice对象和Servant 映射到Servant 并分派请求给Servant 2 辅助Ice对象和Servant的生命期操作 3 提供传输端点 注意 每个通信器可拥有一个或多个对象适配器 每个对象适配器可拥有一个或多个Servant 每个对象适配器可拥有多个传输端点 这些传输端点代表的是通向同一组对象的不同路径 每个对象适配器可非强制性拥有自己的线程池 通过 ThreadPool Size设置 如果设置了适配器自己的线程池 那么给对象适配器的分配操作将使用自己线程池中的线程 而不会使用通信器中的线程池 1 ICE运行时 1 4

7、1活动Servant映射表 每个对象适配器都维护有一个活动Servant映射表 ASM 对于收到的客户端请求 对适配器会根据对象标识到ASM中查找正确的Servant来分派这个请求 注意 如果客户端请求包含的对象标识无法在ASM中找到正确的Servant 则适配器会返回ObjectNotExistException异常给客户端 适配器没有使用Servant定位器时 1 ICE运行时 1 4对象适配器 1 4 2Servants Servant是位于服务端 为客户端提供实际服务业务的Ice对象实例 它使用具体语言实现Ice接口 注意 同一Servant可注册给多个对象适配器 Ice Object

8、AdapterPtradapter communicator createObjectAdapter Hello ServantDemo HelloPtrhello newHelloI adapter add hello communicator stringToIdentity hello adapter activate 1 ICE运行时 1 4对象适配器 HelloI实现的接口Slice定义 moduleDemo interfaceHello idempotentvoidsayHello intdelay voidshutdown 接口实现 classHelloI publicDemo

9、Hello 1 4 3对象适配器的创建及提供的接口 对象适配器的创建 使用通信器提供的方法 Ice ObjectAdapterPtrcreateObjectAdapter const std string 1 ICE运行时 1 4对象适配器 示例 Ice ObjectAdapterPtradapter ic createObjectAdapterWithEndpoints SimplePrinterAdapter default p10000 1 4 4Servant的激活与解除激活 Servant激活 告知Ice运行时某个Servant的存在 加入ASM 解除激活 将Servant从ASM中

10、移除 对象适配器提供了add函数来激活和解除Servant Object add Objectservant Identityid Object addWithUUID Objectservant voidremove Identityid 1 ICE运行时 1 4对象适配器 1 4 4Servant的激活与解除激活 注意 不允许使用同一标识激活多次 不同标识可用来激活同一Servant多次 这种情况下同一Servant将表现为多个Ice对象 addWithUUID会自动为Servant生成一个UUID作为对象标识 Demo HelloPtrhello newHelloI Servantada

11、pter add hello communicator stringToIdentity hello 1 ICE运行时 1 4对象适配器 1 4 5对象适配器状态 对象适配器具有三种状态 保持状态 holding 活动状态 active 不活动状态 inactive 1 ICE运行时 1 4对象适配器 1 4 5对象适配器状态 保持状态 holding 处于保持状态的适配器 任何到来的请求客户端都会收到TimeoutException或ConnectTimeoutException异常 注意 出于保持状态下面向流协议的适配器 TCP IP 服务端运行时会停止从相应的传输端点读数据 同时也会拒绝

12、客户端的连接请求 对象适配器提供的操作 voidIce ObjectAdapter hold 该操作或将适配器置为hold状态 但是不会等待已有请求的完成 会立即返回 voidIce ObjectAdapter waitForHold 该操作会阻塞调用线程 知道所有已有请求完成 1 ICE运行时 1 4对象适配器 1 4 5对象适配器状态 活动状态 active 活动状态下的适配器可以接收并分派请求到servant注意 新创建的适配器初始化状态是Holding状态 双向连接的适配器不需要激活 双向连接参见1 7 并置调用 collocatedinvocation 即使适配器没有激活调用也会成功

13、 除非你禁用了并置调用优化 对象适配器提供的操作 voidIce ObjectAdapter activate 激活对象适配器 例如 Ice ObjectAdapterPtradapter communicator createObjectAdapter Hello Demo HelloPtrhello newHelloI Servantadapter add hello communicator stringToIdentity hello adapter activate 激活适配器 1 ICE运行时 1 4对象适配器 1 4 5对象适配器状态 不活动状态 inactive 不活动状态下

14、适配器在概念上已经被销毁了 一旦适配器处于不活动状态 那么它将不能再被重新激活对象适配器提供的操作 voidIce ObjectAdapter deactivate voidIce ObjectAdapter waitForDeactivate voidIce ObjectAdapter isDeactivated voidIce ObjectAdapter destroy 1 ICE运行时 1 4对象适配器 1 4 6Endpoints 端点 Endpoints 由 传输协议 主机名 端口组成 格式 protocal h hostaddr1 p portNo protocal h hosta

15、ddr2 p portNo 一个对象适配器维护有两组传输端点 一组用于对象适配器监听新的连接 物理传输端点 一组嵌入适配器创建的代理对象中 用于客户端通信使用 发布端点 publishedendpoints 大多数情况下 这两组端点是一样的 但它们是可以独立配置的 1 ICE运行时 1 ICE运行时 1 4对象适配器 1 4 6Endpoints 端点 物理端点 PhysicalEndpoints 物理传输端点是对象适配器用来接收客户端请求用的 可由 name Endpoints属性或createObjectAdapterWithEndpoints方法进行设定 例如 Hello Endpoin

16、ts tcp p10000 udp p10000 ssl p10001注意 1 如果端点中定义了主机名 那么对象适配器只能监听该网络接口上的请求 2 如果端点中未定义主机名 但是属性Ice Default Host定义了 那么对象适配器将监听Ice Default Host定义的主机名的端点 3 如果上面两者都未定义 那么对象适配器将监听所有网络接口 1 ICE运行时 1 ICE运行时 1 4对象适配器 1 4 6Endpoints 端点 注意 4 如果要强制对象适配器监听所有网络接口 则可定义端点中的主机名为0 0 0 0或 5 如果端点中指定了主机名 但是没有指定回环接口 那么回环接口是不会被监听的 必须加入后才能监听回环接口 MyAdapter Endpoints tcp h10 0 1 1 p9999 tcp h127 0 0 1 p9999 6 如果端点中没有指定端口 则对象适配器会使用系统选择的一个端口进行监听 该端口不固定 1 ICE运行时 1 ICE运行时 1 4对象适配器 1 4 6Endpoints 端点 发布端点 PublishedEndpoints 对象适配器创

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号