本文轉載於:http://blog.csdn.net/educast/article/details/9414789
目錄
1. 概述... 1
1.1 配置目標... 1
1.2 實驗環境... 1
1.3 局限... 1
2. 配置過程... 1
2.1 服務器端配置... 2
2.1.1 主注冊服務配置... 3
2.1.2 從注冊服務配置... 7
2.1.3 應用部署配置... 12
2.1.4 節點配置... 15
2.2 客戶端配置... 17
3. 結果驗證... 17
3.1 程序方式... 17
3.2 工具方式... 18
1. 高級應用配置... 18
4.1 集成IceBox. 18
4.1.1 IceBox服務程序編寫... 18
4.1.2 IceGrid集成IceBox服務... 20
4.1.3 測試驗證... 26
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程序來進行管理