这系列文章将会一步步教你如何蔀署一个ICE服务如果你正在读这篇博客,我想你已经了解了什么是ICE(Internet Communications Engine)以及如何去实现ICE服务,并且了解什么是ICE对象、ICE对象标识符、ICE对象适配器、ICE服务实现servant、ICE通信器等概念当然如果你连什么是ICE都不知道,我不建议你继续读下去
先说一下ICE的基本组件:
(1) Slice工具:将Slice语言定义的接口編译成各种特定语言实现的代码,这属于开发环境的一部分
(3)ICE运行库:由ICE实现平台提供的一套API不同的语言有不同的实现,如java使用的是jar包c++使用的是.so文件,这套API需要被ICE服务的客户端和服务端调用
我在写这系列博客时使用的开发环境如下:
文件中定了一个EmployeeInfo结构体作为员工的信息結构体定义了一个接口QueryEmployee,我们需要在自己的服务端代码中实现这个接口
//初始化ice通信器communicator,可以使用args传入一下ice初始化的参数如超时时间,线程池大小等 //初始化ice通信器communicator,可以使用args传入一下ice初始化的参数如超时时间线程池大小等 // 传入远程服务单元的 ice对象标识符 协议默认tcp 主机 已经服務***端口 // 检查通用客户端代理op 是不是queryServer对象标识符所关联的ice对象的代理 // 输出服务端返回结果
当然你可以直接在eclipse里运行服务端启动ice服务的main方法,但是为了延续后面的服务部署思路我这里打算将代码打成jar包,通过一个简单的shell脚本来运行这个main方法
我在服务器上写了一个非常简單的容器IceServer用于启动这个ice服务,该容器的目录结构如下所示:
bin目录下面有如下两个文件:
最后我们在本地运行客户端调用代码输出如下:
优點:直接使用服务端main函数启动没有引入ice其他容器组件,客户端和服务端直接通过tcp建立连接是一个十分轻量级的服务。
确定:客户端直接写死了服务的Endpoint信息及其不灵活;服务端部署方式简单粗暴 不易运维,无法实现负载均衡、故障恢复
这种部署方式只是简单粗暴的演示完全不能作为工业级的部署方案。
下一节我们将实现另一种部署方案该方案会解决该种部署方式的一些问题。