1. 概述
1.1 配置目标
本文档是描述Ice中间件中的IceGrid服务的应用配置,通过使用IceGrid服务来实现:
1. 服务器端服务分布式部署。
2. 服务器端服务按需激活。
3. 服务器端服务多节点负载均衡。
4. 注册服务主/从热备(Master/Slaves)
5. 集成IceBox服务
1.2 实验环境
1. 硬件:hp服务器,3台
2. 操作环境:Red Hat 5
3. 服务器程序:ServerApp.jar
4. 说明:实际应用中,服务器节点可任意扩充、操作系统可被更换、服务器程序可用实际项目的服务程序替换,本文档所描述的配置方式具有通用性,适用但不局限于当前实验环境。
1.3 局限
本文档不详细描述IceGrid服务的运行机制和实现原理,不详细介绍服务器端和客户端程序的实现,主要描述IceGrid服务应用的配置步骤、主要配置项及验证配置结果等。
2. 配置过程
2.1 服务器端配置
配置步骤:
1. 创建主注册服务(Master)的配置文件config_master.grid,文件名称可以任意
2. 创建从注册服务(Slave)的配置文件 config_slave.grid, 文件名称可以任意
3. 创建各节点服务的配置文件config.node,文件名称可以任意
4. 创建分布式应用配置文件app.xml,文件名称可以任意,但格式最好定义成xml
5. 运行Ice提供的工具,启动我们的分布式应用,主要有如下两个工具:icegridnode和icegridadmin。详细启动过程如下:
1) icegridnode--Ice.Config=config_master.grid 启动主注册服务
2) icegridnode--Ice.Config=config_slave.grid 启动从注册服务
3) icegridadmin--Ice.Config= config_master.grid -e "application add app.xml" 部署分布式服务
icegridadmin --Ice.Config= config_master.grid-e "application update app.xml" 重新部署分布式服务
4) icegridnode--Ice.Config=config.node 将各节点注册到注册服务的注册表中
配置文件清单:
假设有n个节点(n > 0), 其中从注册服务有x个,(x > 0)
config_master.grid ---------- 主注册服务配置文件 --------- 1份
config_slave.grid ----------- 从注册服务配置文件 --------- x份
config.node ----------------- 节点配置文件 -------------- n份
app.xml ---------------------- 部署配置文件 -------------- 1份
通常情况下,由于注册服务占用资源很少,所以一般都会和一个节点集成在一起,并且可以和节点服务在一个进程中运行。因此,如果假设服务部署到n个服务器,通常情况下配置文件清单如下:
config_master.grid-- 主注册服务配置文件 -- 1份 -- 主注册服务信息+节点信息
config_slave.grid--- 从注册服务配置文件 -- x份 -- 从注册服务信息+节点信息
config.node--------- 节点配置文件 ---- n-1-x份 -- 节点信息
app.xml------------- 部署配置文件 -------- 1份 -- 部署信息
其中app.xml要和config_master.grid放在一台服务器上,下面的各章节将详细介绍各配置文件。
2.1.1 主注册服务配置
config_master.grid的内容:
#
# The IceGrid InstanceName
#
IceGrid.InstanceName=IceGridRDDataSource # 1
#
# The IceGridlocator proxy.
#
Ice.Default.Locator=IceGridRDDataSource/Locator:default-h 10.0.5.201 -p 12000:default -h 10.0.5.202-p 12000 #2
#
# IceGridregistry configuration.
#
IceGrid.Registry.Client.Endpoints=default-p 12000 #3
IceGrid.Registry.Server.Endpoints=default #4
IceGrid.Registry.Internal.Endpoints=default #5
IceGrid.Registry.Data=master #6
IceGrid.Registry.PermissionsVerifier=IceGridRDDataSource/NullPermissionsVerifier #7
IceGrid.Registry.AdminPermissionsVerifier=IceGridRDDataSource/NullPermissionsVerifier#8
IceGrid.Registry.SSLPermissionsVerifier=IceGridRDDataSource/NullSSLPermissionsVerifier#9
IceGrid.Registry.AdminSSLPermissionsVerifier=IceGridRDDataSource/NullSSLPermissionsVerifier #10
#
# IceGrid SQLconfiguration if using SQL database.
#
#Ice.Plugin.DB=IceGridSqlDB:createSqlDB #11
#IceGrid.SQL.DatabaseType=QSQLITE #12
#IceGrid.SQL.DatabaseName=register/Registry.db #13
#
#
#Ice Error andStandard output Set
#
#Ice.StdErr=master/stderr.txt #14
#Ice.StdOut= master/stdout.txt #15
#
#Trace Registryproperties
#
Ice.ProgramName=Master #16
IceGrid.Registry.Trace.Node=3 #17
IceGrid.Registry.Trace.Replica=3 #18
#
# IceGrid nodeconfiguration.
#
IceGrid.Node.Name=node_1 #19
IceGrid.Node.Endpoints=default #20
IceGrid.Node.Data=node_1 #21
IceGrid.Node.CollocateRegistry=1 #22
#IceGrid.Node.Output=node_1 #23
#IceGrid.Node.RedirectErrToOut=1 #24
# Traceproperties.
#
IceGrid.Node.Trace.Activator=1 #25
#IceGrid.Node.Trace.Adapter=2 #26
#IceGrid.Node.Trace.Server=3 #27
#
# Dummy usernameand password for icegridadmin.
#
IceGridAdmin.Username=mygrid #28
IceGridAdmin.Password=mygrid #29
配置项说明:
#1 为这个应用实例指定一个唯一的标识
# 2 注册服务的端点信息(主注册服务和所有的从注册服务),节点注册时要用到
# 3 客户端访问注册服务器的端点信息
# 4 服务访问注册服务器的端点信息,通常是default
# 5 内部访问端点信息,通常是default,节点用这个端口和注册服务通信
# 6 注册服务的数据目录的路径
# 7 设定防火墙安全代理,从而控制客户端访问注册表时可用的权限
# 8 设定防火墙安全代理,从而控制注册表管理者可用的权限
# 9 设定SSL安全代理,从而设定客户端访问注册表时的SSL安全访问机制
# 10 设定SSL安全代理,从而设定注册表管理者的SSL安全访问机制
# 11 指定Ice对象序列化的机制,如果不设置,默认用Freeze机制
# 12 指定使用数据库的类型
#13 指定使用数据库的名称
#14 指定标准错误输出文件
#15 指定标准输出文件
#16 指定主注册服务的名称
#17 指定主注册服务跟踪节点信息的级别(0~3),默认为0
#18 指定主/从热备注册服务的跟踪级别(0~3),默认为0
# 19 定义节点的名称,必须唯一
# 20 节点被访问的端口信息,注册服务使用这个端点和节点通信,通常设为default
# 21 节点的数据目录的路径
# 22 定义节点是否和注册服务并置在一起,设为1时并置,设为0时不并置
# 23 节点标准输出信息重定向蹈的目录路径,会自动生成输出文件
# 24 节点上的服务程序的标准错误重定向到标准输出
# 25 激活器跟踪级别,通常有0,1,2,3级,默认是0
# 26 对象适配器跟踪级别,通常有0,1,2,3级,默认是0
# 27 服务跟踪级别,通常有0,1,2,3级,默认是0
# 28 IceGrid管理器登录该应用的用户名
# 29 IceGrid管理器登录该应用的密码
未涉及的属性还有一些,如果需要请参考官方文档。
2.1.2 从注册服务配置
config_slave.grid的内容:
#
# The IceGridlocator proxy.
#
Ice.Default.Locator=IceGridRDDataSource/Locator:default-h 10.0.2.241 -p 12000:default -h 10.0.2.242-p 12000 #1
#
# IceGridregistry configuration.
#
IceGrid.Registry.Client.Endpoints=default-p 12000 #2
IceGrid.Registry.Server.Endpoints=default #3
IceGrid.Registry.Internal.Endpoints=default #4
IceGrid.Registry.Data=slave_1 #5
IceGrid.Registry.ReplicaName=slave_1 #6
IceGrid.Registry.PermissionsVerifier=IceGridRDDataSource/NullPermissionsVerifier #7
IceGrid.Registry.AdminPermissionsVerifier=IceGridRDDataSource/NullPermissionsVerifier#8
IceGrid.Registry.SSLPermissionsVerifier=IceGridRDDataSource/NullSSLPermissionsVerifier#9
IceGrid.Registry.AdminSSLPermissionsVerifier=IceGridRDDataSource/NullSSLPermissionsVerifier #10
#
# IceGrid SQLconfiguration if using SQL database.
#
#Ice.Plugin.DB=IceGridSqlDB:createSqlDB #11
#IceGrid.SQL.DatabaseType=QSQLITE #12
#IceGrid.SQL.DatabaseName=register/Registry.db #13
#
#
#Ice Error andStandard output Set
#
#Ice.StdErr=slave_1/stderr.txt #14
#Ice.StdOut=slave_1/stdout.txt #15
#
#Trace Registryproperties
#
Ice.ProgramName=Slave_1 #16
IceGrid.Registry.Trace.Node=3 #17
IceGrid.Registry.Trace.Replica=3 #18
#
# IceGrid nodeconfiguration.
#
IceGrid.Node.Name=node_2 #19
IceGrid.Node.Endpoints=default #20
IceGrid.Node.Data=node_2 #21
IceGrid.Node.CollocateRegistry=1 #22
#IceGrid.Node.Output=node_2 #23
#IceGrid.Node.RedirectErrToOut=1 #24
# Traceproperties.
#
IceGrid.Node.Trace.Activator=1 #25
#IceGrid.Node.Trace.Adapter=2 #26
#IceGrid.Node.Trace.Server=3 #27
#
# Dummy usernameand password for icegridadmin.
#
IceGridAdmin.Username=mygrid #28
IceGridAdmin.Password=mygrid #29
配置项说明:
其实这个文件和主注册配置文件基本一样,差别只有一点:
1. 没有指定应用实例名,因为在主注册服务中已经有了定义
2. 多了第6行,IceGrid.Registry.ReplicaName=slave_1,指定从注册服务的名称
其它的基本就没有差别了,大部分属性项在config_master.grid里面都有定义,为了方便阅读,下面也将用到的各项给出说明:
# 1 注册服务的端点信息(主注册服务和所有的从注册服务),节点注册时要用到
# 2 客户端访问注册服务器的端点信息
# 3 服务访问注册服务器的端点信息,通常是default
#4 内部访问端点信息,通常是default,节点用这个端口和注册服务通信
# 5 注册服务的数据目录的路径
# 6 指定从注册服务的名称
# 7 设定防火墙安全代理,从而控制客户端访问注册表时可用的权限
#8 设定防火墙安全代理,从而控制注册表管理者可用的权限
# 9 设定SSL安全代理,从而设定客户端访问注册表时的SSL安全访问机制
#10 设定SSL安全代理,从而设定注册表管理者的SSL安全访问机制
# 11 指定Ice对象序列化的机制,如果不设置,默认用Freeze机制
# 12 指定使用数据库的类型
#13 指定使用数据库的名称
#14 指定标准错误输出文件
#15 指定标准输出文件
#16 指定从注册服务运行时程序名称
#17 指定从注册服务跟踪节点信息的级别(0~3),默认为0
#18 指定主/从热备注册服务的跟踪级别(0~3),默认为0
# 19 定义节点的名称,必须唯一
# 20 节点被访问的端口信息,注册服务使用这个端点和节点通信,通常设为default
# 21 节点的数据目录的路径
# 22 定义节点是否和注册服务并置在一起,设为1时并置,设为0时不并置
# 23 节点标准输出信息重定向蹈的目录路径,会自动生成输出文件
# 24 节点上的服务程序的标准错误重定向到标准输出
# 25 激活器跟踪级别,通常有0,1,2,3级,默认是0
# 26 对象适配器跟踪级别,通常有0,1,2,3级,默认是0
# 27 服务跟踪级别,通常有0,1,2,3级,默认是0
# 28 IceGrid管理器登录该应用的用户名
# 29 IceGrid管理器登录该应用的密码
2.1.3 应用部署配置
app.xml配置文件内容:
1<icegrid>
2 <application name="RTDSSystem">
3 <server-template id="RTDSSystemServer">
4 <parameter name="index"/>
5 <server id="RTDSSystemServer-${index}"exe="java" activation="on-demand">
6 <adapter name="RTDataSysytem" endpoints="tcp" replica-group="ReplicatedRTDataSysytemAdp"/>
7 <option>-jar</option>
8 <option>ServerApp.jar</option>
9 </server>
10 </server-template>
11
12 <replica-group id="ReplicatedRTDataSysytemAdp">
13 <load-balancing type="round-robin"/>
14 <object identity="RTDataSource" type="::RTDataSystem::RTDataSource"/>
15 </replica-group>
16
17 <node name="node_1">
18 <server-instance template="RTDSSystemServer" index="1"/>
19 <server-instance template="RTDSSystemServer" index="11"/>
20 <server-instance template="RTDSSystemServer" index="111"/>
21 </node>
22 <node name="node_2">
23 <server-instance template="RTDSSystemServer" index="2"/>
24 <!--server-instancetemplate="RTDSSystemServer" index="22"/-->
25 <!--server-instancetemplate="RTDSSystemServer" index="222"/-->
26 </node>
27 <node name="node_3">
28 <server-instance template="RTDSSystemServer" index="3"/>
29 <!--server-instancetemplate="RTDSSystemServer" index="33"/-->
30 <!--server-instancetemplate="RTDSSystemServer" index="333"/-->
31 </node>
32 </application>
33</icegrid>
配置文件结构分析:
IceGrid里,部署是一个在注册服务中表述一个应用(Application)的过程,而部署配置文件就是来描述这些配置信息的文件,这个配置文件是用xml标记性语言来描述的。通常一个部署应该包含如下信息:
1. 应用标签(application),name属性定义这个应用的名字
2. 服务(server), 一个逻辑上的服务器,能够通过exe命令而启动的一个服务程序。activation属性,是设置服务的启动方式,on-demand是最常用的方式,另外还有always等启动方式;option标签是exe执行命令命令行的参数;
3. 适配器(adpter),定义服务器端的适配器。
name属性唯一标志这个适配器;
endpoints属性指定端点信息;
replica-group属性标示该适配器是个可复制组集群,并指定这个可复制组的名称;
register-process属性定义了是否这个节点是否可以被icegrid关闭;
4. 节点(node),它应该代表了一个物理上的节点。
name属性指定节点的名字,并且是唯一的。
5. 可复制组(replica-group),一组对象适配器的集合。
id属性唯一标识一个可复制组;
load-balancing子项中type属性指定负载均衡策略,icegrid提供了四种负载均衡策略: Random (随机方式)
Adaptive(适配方式)
Round Robin(最近最少使用)
Ordered(顺序方式)
object子项定义适配器绑定的服务对象信息。其中identity属性指定对象的标识,type属性指定了对象的层次结构类型。这两个属性都可以唯一的标识一个服务对象。
6. 服务模板(server-temple),服务模板是对服务的一个抽象,避免了重复定义。这样,在节点中描述服务时只需要实例化它的服务模板就可以了。
id属性唯一标识一个服务模板;
parameter子项定义服务模板的参数,可包含多个,主要实例化服务时用;
server子项就是上面2中的服务定义;
另外还有一些特殊的服务模板,比如:icebox服务模板,它的定义和通用的服务模板的定义不太一样。
解析app.xml文件:
通过对配置文件结构的分析,来解析一下app.xml。
第1行,标识这是一个icegrid的配置文件;
第2行,标识应用的名称为RTDSSystem,这个名称是唯一的;
第3~10行,定义了一个服务模板RTDSSystemServer,并有一个参数index;
其中5~9定义了这个模板包含的服务定义,第6行是这个服务包含的对象适配器
的定义;
第12~15行,是对可复制组的定义,包括服务对象的定义和负载均衡策略;
第17~21行,是对节点node_1的定义,指定了节点的名称,包含的服务(3个服务);
第22~26行,是对节点node_2的定义
第27~31行,是对节点node_3的定义
最后两行是闭合标签,至此一个icegrid的分布式部署配置文件就完成了。
部署配置文件的扩展:
app.xml中对服务模板、适配器、服务对象等的配置都是一个,事实上这些可以在文件中定义多个,比如可以有多个服务模板,一个服务里可以有多个适配器,可以有多个可复制组,一个节点里可以有多个不同类型的服务等。
另外,app.xml可以包含其它的xml。
2.1.4 节点配置
config.grid文件的内容:
#
# The IceGridlocator proxy.
#
Ice.Default.Locator=IceGridRDDataSource/Locator:default-h 10.0.2.241 -p 12000:default -h 10.0.2.242-p 12000 #1
#
# IceGrid nodeconfiguration.
#
IceGrid.Node.Name=node_2 #2
IceGrid.Node.Endpoints=default #3
IceGrid.Node.Data=node_2 #4
IceGrid.Node.Output=node_2 #5
IceGrid.Node.RedirectErrToOut=1 #6
# Trace properties.
#
IceGrid.Node.Trace.Activator=1 #7
#IceGrid.Node.Trace.Adapter=2 #8
#IceGrid.Node.Trace.Server=3 #9
配置项说明:
事实上,这个文件里面的配置项,在config_slave.grid中都有描述,但这里也列出来,方便阅读。
#1 注册服务的端点信息(主注册服务和所有的从注册服务),节点注册时要用到
#2 定义节点的名称,必须唯一
#3 节点被访问的端口信息,注册服务使用这个端点和节点通信,通常设为default
#4 节点的数据目录的路径
#5 节点标准输出信息重定向的目录路径,会自动生成输出文件
#6 节点上的服务程序的标准错误重定向到标准输出
#7 激活器跟踪级别,通常有0,1,2,3级,默认是0
#8 对象适配器跟踪级别,通常有0,1,2,3级,默认是0
#9 服务跟踪级别,通常有0,1,2,3级,默认是0
2.2 客户端配置
客户端的配置很简单,和分布式相关的配置就一项,添加如下:
#
# The IceGridlocator proxy.
#
Ice.Default.Locator=IceGridRDDataSource/Locator:default-h 10.0.2.241 -p 12000:default -h 10.0.2.242-p 12000 #注册服务的端点信息(主注册服务和所有的从注册服务),用于定位
3. 结果验证
3.1 程序方式
1. 启动服务器
1) icegridnode--Ice.Config=config_master.grid 启动主注册服务和节点1
2) icegridnode--Ice.Config=config_slave.grid 启动从注册服务和节点2
3) icegridadmin--Ice.Config=config_master.grid -e "application add app.xml" 部署分布式服务
4) icegridnode--Ice.Config=config.node 启动节点3
2. 启动客户端,进行多次远程调用,根据执行情况就可以判断服务器端是否配置成功。
3.2 工具方式
用Ice官方提供的可视化管理工具IceGridGUI.jar来验证和管理icegrid的部署。
打开dos窗口,在命令行下进入C:\Program Files\ZeroC\Ice-3.4.1\bin目录下,然后运行“java –jar IceGridGUI.jar”,弹出IceGrid Admin的主界面
1. 高级应用配置
4.1 集成IceBox
在文档《IceBox开发和配置》(当前是1.0版)中,介绍了一个IceBox服务程序的开发方法和单独应用中配置和管理的过程。在实际的应用中,IceBox服务通常集成到IceGrid中,并通过IceGrid进行激活和部署。
本章节中IceBox服务是集成在IceGrid中,并通过IceGrid进行部署,所以IceBox服务的配置信息不再同《IceBox开发和配置》中一样在config.icebox中描述,而是直接配置在部署文件app.xml中。那也就是说,IceGrid集成IceBox服务,只需要在app.xml文件中添加Icebox服务相关的配置信息就可以了。事实上,有关Ice所有的配置信息(除IceGrid自身的配置信息),都可以添加到app.xml中,并通过icegrid部署后生效。
下面各节详细描述IceBox服务的集成过程。
4.1.1 IceBox服务程序编写
请参考文档《IceBox开发和配置》,这里不再详述。由于IceBox服务相关的配置信息都放在了app.xml中,并且服务是通过IceGrid按需激活的,因此这里程序代码略有调整。下面列出IceBox服务的实现代码:
文件名:ServerService.java
import main.java.DataSource;
import IceBox.Service;
public class ServerService implements IceBox.Service {
/**
* @param name 配置文件中的service名称
* @param communicator对象,由IceBox.ServiceManager负责创建和销毁。
* 可能同时被其他服务共享使用(由配置文件决定),object Adapter的名
* 称必须是唯一的;
* @param args 配置文件中的参数列表
* @Override
**/
public void start(String name,Ice.Communicator communicator,
String[] args){
//创建objectAdapter,名称有配置文件决定
Adapter =communicator.createObjectAdapter(
"RTDataSystem-"+name);
//创建servant
StringRTDataSourceIdentity = communicator.getProperties().
getProperty("RTDataSource.Identity");
DataSourceobjDataSrc = new DataSource("dataSource");
Adapter.add(objDataSrc,
communicator.stringToIdentity(RTDataSourceIdentity));
Adapter.activate();
}
/**
*
* @param args
* @Override
*
**/
public void stop()
{
Adapter.destroy();
}
private Ice.ObjectAdapter Adapter;
}
4.1.2 IceGrid集成IceBox服务
IceGrid集成IceBox只和部署文件(app.xml)有关,IceBox服务(service)的粒度和普通的server是一样的,因此IceBoxservice的部署和普通的server非常类似,它同样有模板、服务(service)和实例化的概念,可以将IceBox service理解为一个特殊的server。
为了能更清楚的描述这个集成配置的过程,在IceGrid配置的基础上,添加IceBox服务。具体目标如下:
1. 集成ServerService服务(service),并且ServerService服务(service)使用的服务对象和之前server的服务对象使用同一个(type--::RTDataSystem::RTDataSource)
2. 在节点1(node_1)上添加IceBox服务功能(IceBox-Node1),这个IceBox服务包含了5个ServerService服务;同样的在节点2(node_2)上也添加一个IceBox服务功能(IceBox-Node2),也包含了5个ServerService服务
3. 这些IceBox服务中分布的多个服务(service)和之前已经存在的服务(server)一起通过IceGrid实现负载均衡
为了实现上述的功能,需要添加IceBox服务的相关配置,首先看一下此时app.xml的变化,变化和添加部分用浅灰阴影标出。
app.xml
<?xml version="1.0"encoding="UTF-8" ?>
<icegrid>
<applicationname="RTDSSystem">
<server-templateid="RTDSSystemServer">
<parameter name="index"/>
<server id="RTDSSystemServer-${index}" exe="java"activation="on-demand">
<adapter name="RTDataSysytem"endpoints="tcp"
replica-group="RTDataSystemGroup"/>
<option>-jar</option>
<option>ServerApp.jar</option>
</server>
</server-template>
<!— begin服务模板定义-->
1 <service-templateid="RTDSystemService">
2 <parameter name="name"/>
3 <service name="${name}" entry="ServerService">
4 <description>A simple service named after ${name}</description>
5 <properties>
6 <property name="RTDataSource.Identity" value="RTDataSource"/>
7 </properties>
8 <adapter name="RTDataSystem-${name}" endpoints="tcp"
id="RTDataSystem-${name}" replica-group="RTDataSystemGroup"
server-lifetime="false"/>
11 </service>
12 </service-template>
<!-- end服务模板定义-->
<replica-groupid="RTDataSystemGroup">
<load-balancingtype="round-robin"/>
<!--load-balancingtype="ordered" /-->
<!--load-balancingtype="adaptive" /-->
<!--load-balancingtype="random" n-replicas="0"/-->
<object identity="RTDataSource" type="::RTDataSystem::RTDataSource"/>
</replica-group>
<node name="node_1">
<server-instancetemplate="RTDSSystemServer" index="1"/>
<server-instancetemplate="RTDSSystemServer" index="11"/>
<server-instancetemplate="RTDSSystemServer" index="111"/>
<!— begin IceBox服务配置 IceBox-Node1-->
1 <icebox id="IceBox-Node1" activation="on-demand"exe="java">
2 <description>Asample IceBox server IceBox-Node1</description>
3 <option>IceBox.Server</option>
4 <properties>
5 <property name="IceBox.InstanceName" value="${server}"/>
6 <property name="Ice.Admin.Endpoints" value="tcp -h 10.0.2.241"/>
7 <property name="IceBox.Trace.ServiceObserver" value="1"/>
8 </properties>
9 <service-instance template="RTDSystemService" name="one"/>
10 <service-instancetemplate="RTDSystemService" name="two"/>
11 <service-instancetemplate="RTDSystemService" name="three"/>
12 <service-instancetemplate="RTDSystemService" name="four"/>
13 <service-instancetemplate="RTDSystemService" name="five"/>
14 </icebox>
<!— end IceBox服务配置 IceBox-Node1-->
</node>
<node name="node_2">
<server-instancetemplate="RTDSSystemServer" index="2"/>
<server-instancetemplate="RTDSSystemServer" index="22"/>
<server-instancetemplate="RTDSSystemServer" index="222"/>
<!— begin IceBox服务配置 IceBox-Node2-->
1 <icebox id="IceBox-Node2" activation="on-demand"exe="java">
2 <description>Asample IceBox server IceBox-Node2</description>
3 <option>IceBox.Server</option>
4 <properties>
5 <property name="IceBox.InstanceName" value="${server}"/>
6 <property name="Ice.Admin.Endpoints" value="tcp -h 10.0.2.242"/>
7 <property name="IceBox.Trace.ServiceObserver" value="1"/>
8 </properties>
9 <service-instancetemplate="RTDSystemService" name="2-one"/>
10 <service-instancetemplate="RTDSystemService" name="2-two"/>
11 <service-instancetemplate="RTDSystemService" name="2-three"/>
12 <service-instancetemplate="RTDSystemService" name="2-four"/>
13 <service-instancetemplate="RTDSystemService" name="2-five"/>
14 </icebox>
<!— begin IceBox服务配置 IceBox-Node2-->
</node>
<node name="node_3">
<server-instancetemplate="RTDSSystemServer" index="3"/>
</node>
</application>
</icegrid>
app.xml中增加的IceBox服务相关的配置部分如下:
n 服务摸板(Service Template):
可以对比一下servertemplate的定义,两者基本上没有什么区别,最大的不同是
Server template中server是指定一个可执行的程序,而service中指定的是动态加载
的组件入口。以下解释上述配置中的服务模板的定义:
第1行指定定义模板的id,唯一标志一个服务模板,第12是闭合标签;
第2行定义了一个参数name,默认值是“name”;
第3~11行定义了模板中使用的服务(service),并在该service中指定了名称、
入口、描述信息、配置属性,定义了一个对象适配器;
第4行,是该服务的描述信息;
第5~7行,是属性定义列表,这里定义了一个属性RTDataSource.Identity,并
指定其值为RTDataSource;
第8行,定义了一个对象适配器,指定了其name、endpoints、id、replica-group
等属性信息,这个基本上和server中adapter的定义没有什么区别
以上内容就是service模板的定义。
n IceBox服务(IceBox-Node1):
icebox服务的定义被包含在分布的服务器节点中,主要包括三部分的信息:
1. IceBox服务的启动配置信息
2. IceBox的属性配置信息
3. Service服务实例化列表
下面解释这块内容:
第1~3行,指定了IceBox服务的名称,启动方式,启动执行程序等
第4~8行,指定了IceBox服务的属性配置列表,这里定义了IceBox服务的实
例名称、管理器访问端点以及service被跟踪的级别
第9~13行,实例化了5个service服务
至此,一个包含了5个serverservice服务的IceBox服务被集成在node1中。
n IceBox服务(IceBox-Node2)
同IceBox服务(IceBox-Node1)中描述,只是具体value有所不同,这里不再解释。
4.1.3 测试验证
验证方式同第3章,这里不再赘述。部署完成后,就可以通过IceGridGUI.jar程序来进行管理
相关推荐
### IceGrid应用配置手册知识点详解 #### 概述 **配置目标:** 本文档旨在指导用户如何使用IceGrid服务进行有效的应用配置。IceGrid作为Ice中间件的重要组成部分,提供了多种功能,包括但不限于: 1. **分布式...
### IceGrid配置手册知识点 #### 一、IceGrid配置概览与目标 **知识点1:IceGrid服务的应用目的** - **分布式部署**:允许服务在多个服务器之间进行部署,提高系统的扩展性和可用性。 - **按需激活**:根据实际...
《ICE接口与MySQL数据库结合应用详解》 在IT领域,高效的数据交互是系统设计的关键环节。本示例“Demo_ice.zip_DEMO_Demo_ice_ICE_ICE demo_ice mysql”提供了一个通过ICE(Internet Communication Engine)接口...
ICE(Internet Communications Engine)是一种现代的、高性能的分布式计算框架,由Object Computing, Inc.(OCI)开发。它类似于CORBA(Common Object Request Broker Architecture),但设计得更加简洁、高效,易于...
【标题】"Ice.zip_ICE_ICE C++" 指的是一个压缩包,其中包含与ICE(Internet Communication Engine)相关的C++程序代码。ICE是一个跨平台的中间件,用于构建分布式应用程序,它提供了多种语言的接口,包括C++。 ...
标题中的“ICE.rar_ICE_ice debug_多核系统”暗示了这是一份与ICE(可能代表Integrated Circuit Emulator,即集成电路仿真器)相关的技术资料,重点在于多核系统的调试和ICE的使用。描述中提到的“基于ICE仿真器的...
matlab ice.fig 函数源代码
在压缩包中的"ICE编译.txt"文件很可能是详细的编译指南,包含具体配置选项、依赖库的安装、编译过程中可能遇到的问题及解决方案等。这份文档应该按照一定的步骤指导用户完成整个流程,确保ICE内核能在Linux环境下...
标题中的"ARM-code.rar_ARM ICE_ICE_multi ice_multi-i_multi-ice"暗示了这是一个与ARM架构微处理器相关的项目,特别是涉及到ARM ICE(Integrated Circuit Emulation)工具,这是一类用于调试和开发ARM芯片的硬件...
标题中的"multi-ice.rar_ICE_multi ice_multi-ice"似乎是一个压缩文件的名称,它包含了一系列与"ICE"(可能是指集成计算环境或者是一种特定的技术)和"multi-ice"相关的项目或软件。"multi-ice"可能是某种软件、框架...
在IT领域,特别是汽车工程和控制系统的仿真与分析中,"ICE"通常指的是Internal Combustion Engine(内燃机)。本文将围绕标题“ICE_MAP.zip_ICE_ICE曲线_matlab 万有特性_matlab 发动机_万有特性”展开,详细讲解...
《冈萨雷斯数字图像处理MATLAB版源码:ICE源码解析》 在计算机科学领域,数字图像处理是一项至关重要的技术,广泛应用于医学影像、遥感、机器视觉等多个领域。MATLAB作为强大的数学计算和数据分析工具,是进行图像...
在IT领域,ICE(Integrated Computing Environment)是一种广泛使用的软件框架,尤其在地球科学、遥感以及图像处理等专业领域。ICE通常与ISCE(Integrated System for Circular SAR Processing)结合使用,提供了一...
在IT行业中,ICE(Internet Communication Engine)是一种高性能的中间件框架,主要用于构建分布式系统和实时通信应用。"ICE_1.rar_ICE_ICE 并发"这个标题表明我们即将探讨的是ICE框架中的并发处理机制,这涉及到多...
了解这些协议的工作原理和配置方法对于优化ICE应用的网络性能至关重要。 在实际开发中,你还需要掌握如何进行单元测试、集成测试,以及如何进行性能测试和调优。熟悉ICE的文档和社区资源也是提高开发效率的关键。 ...
标题中的"Melt_Ice_Model_ICE_融冰_melting_直流融冰_全桥整流_"暗示了我们讨论的核心内容是利用直流电流对输电线进行融冰的模拟模型。在这个模型中,"ICE"可能代表了冰的物理状态或者是一种特定的融冰控制系统。接...
芯海科技是一家专注于微控制器(MCU)及智能传感解决方案的公司,其产品广泛应用于消费电子、工业控制、健康医疗等多个领域。在MCU开发过程中,选择合适的开发工具至关重要,这直接影响到项目的效率和产品的质量。...
这里我们关注的是“将研发文档中的01 项目部署到IceGrid中”,这涉及到两个主要知识点:IceGrid和C# ICE。 首先,让我们来了解IceGrid。IceGrid是一个强大的分布式系统管理框架,由ZeroC公司开发,它提供了服务注册...
这是一个开发框架,适合新手练习,框架性能优秀,可以提高开发效率;