一、 简介
Ice版本:3.1.1
使用iceGrid服务实现一个简单的打印系统,主要说明iceGrid的使用方法,系统部署在4台主机上,注册器和打印服务器安装在同一台主机上,如下图所示:
下图显示了一个客户端通过间接代理的初始调用,来激活目标服务器。
在这个架构当中不需要花时间手动启动服务。客户端的寻址请求提示注册器去查询节点的服务器状态并且根据需要启动它。一旦这个服务启动成功,这个寻址请求完成,并且随后客户端直接和服务端通信。
二、 配置注册器、节点1
注册器需要一个子目录,在这个目录中创建它的数据库,由IceGrid.Registry.Data指定,此目录必须在启动注册器前已经存在 。
# Registry properties IceGrid.Registry.Client.Endpoints=tcp -p 4061 IceGrid.Registry.Server.Endpoints=tcp IceGrid.Registry.Internal.Endpoints=tcp IceGrid.Registry.AdminPermissionsVerifier=IceGrid/NullPermissionsVerifier IceGrid.Registry.PermissionsVerifier=IceGrid/NullPermissionsVerifier IceGrid.Registry.Data=F:\lhy_workspace\ICETest\src\iceGrid\registry IceGrid.Registry.Admin.Endpoints=default # Node properties IceGrid.Node.Endpoints=tcp IceGrid.Node.Name=Node1 IceGrid.Node.Data=F:\lhy_workspace\ICETest\src\iceGrid\note IceGrid.Node.CollocateRegistry=1 Ice.Default.Locator=IceGrid/Locator:tcp -p 4061 |
1、注册器和节点1的配置信息在同一个配置文件中,在节点1的服务器上存储该配置文件,如存放在c盘根目录下c:\config,文件名为config。
2、将服务器应用程序以及其依赖的jar包拷贝至节点1相应的目录下,如下文中部署文件配置的C:\PrinterApp.jar。
有几个属性定义了Endpoints,但只有 icegrid.registry.client.endpoints的值需要一个固定的端口。此属性指定IceGrid定位服务的端口; IceGrid的客户端必须在他们的Ice.Default.Locator中包括这个端口。
其他的一些属性:
属性 |
说明 |
IceGrid.Registry.AdminPermissionsVerifier |
这两个属性控制访问Registry的管理权限 |
IceGrid.Registry.PermissionsVerifier |
|
IceGrid.Registry.Data |
这个属性指定Registry的数据库目录,用于存放注册器的一些状态信息,可以任意指定。 |
IceGrid.Registry.DynamicRegistration |
通过将此属性设置为一个非零值,我们允许服务器注册对象适配器 |
IceGrid.Registry.Admin.Endpoints |
指定IceGrid的Admin代理端点, |
IceGrid.Node.CollocateRegistry |
如果值被设置为大于零的值,说明该节点和注册表运行在同一个进程中,该节点和注册器使用相同的配置文件。 |
在使用icegridadmin命令管理icegrid时,缺少这项配置,系统会抛出异常:
no suitable endpoint available for proxy `IceGrid/Admin -t' |
三、 配置节点2
IceGrid.Node.Endpoints=tcp IceGrid.Node.Name=Node2 IceGrid.Node.Data=F:\lhy_workspace\ICETest\src\iceGrid\note2 Ice.Default.Locator=IceGrid/Locator:tcp -h 192.168.1.193 -p 4061 |
1、在节点2的服务器上存储该配置文件,如存放在c盘根目录下c:\config,文件名为config。
2、将服务器应用程序以及其依赖的jar包拷贝至节点2相应的目录下,如下文中部署文件配置的C:\PrinterApp.jar。
属性 |
说明 |
IceGrid.Node.Endpoints |
配置节点的端点,不需要指定固定的端口 |
IceGrid.Node.Name |
为节点定义一个不同的名字 |
IceGrid.Node.CollocateRegistry |
不能有两个节点都配置这个属性只能有一个主Registry,所以此属性在这个节点中不需要再配置 |
IceGrid.Node.Data |
指定该节点的数据目录,用于存储该节点的状态信息,可以任意指定 |
四、 Slice脚本
打印服务器的Slice脚本如下
- module Demo {
- interface Printer {
- string printString(string s);
- };
- };
打印服务器实现简单的打印功能,服务端接收客户端的打印信息,并负责将信息打印到终端,打印完成之后,返回给客户端一个打印完成的提示信息。
五、 Servant代码
- package iceGrid.sampleAdapterLocator.servant;
- public class PrinterI extends Demo._PrinterDisp {