ICE集群环境搭建 - blogs_zixin
IceGrid.Registry.Client.Endpoints=tcp -p 4061 #设置用于监听客户端连接的协议类型及端口
IceGrid.Registry.Data=D:\ice_service\register\data #设置主注册节点的数据存储目录
IceGrid.Registry.Server.Endpoints=tcp #设置与服务器节点之间通讯的协议类型,不指定端口则由系统自动分配
IceGrid.Registry.Internal.Endpoints=tcp #
IceGrid.Registry.AdminPermissionsVerifier=DemoGrid/NullPermissionsVerifier #指定进入管理系统的安全验证方式
IceGridAdmin.Username=test #设置管理用户名
IceGridAdmin.Password=test #设置管理密码
IceGrid.Registry.Server.Endpoints=tcp #设置与服务器节点之间通讯的协议类型,不指定端口则由系统自动分配
IceGrid.Registry.Internal.Endpoints=tcp #
IceGrid.Registry.AdminPermissionsVerifier=DemoGrid/NullPermissionsVerifier #指定进入管理系统的安全验证方式
IceGridAdmin.Username=test #设置管理用户名
IceGridAdmin.Password=test #设置管理密码
IceGrid.Node.Data=D:\ice_service\node\data #设置节点1相关数据的存储目录
IceGrid.Node.Endpoints=tcp -p 5062 #指定节点1用于监听客户端连接的端口号
IceGrid.Node.Name=MyNode1 #指定节点1的名称
Ice.StdErr=D:\ice_service\node\logs\node.stderr.log #指定错误日志文件
Ice.StdOut=D:\ice_service\node\logs\node.stdout.log #指定标准输出流日志文件
IceGrid.Node.Endpoints=tcp -p 5063 #指定节点1用于监听客户端连接的端口号
IceGrid.Node.Name=MyNode2 #指定节点2的名称
Ice.StdErr=D:\ice_service\node\logs\node2.stderr.log #指定错误日志文件
Ice.StdOut=D:\ice_service\node\logs\node2.stdout.log #指定标准输出流日志文件
import Ice.Current;
import com.mop.interf.generated._MessageServiceIceDisp;
public class MessageServiceIceImpl extends _MessageServiceIceDisp{
private static final long serialVersionUID = -6954195427744180145L;
@Override
public String sendMessage(String msg, Current __current) {
System.out.println(“recv:”+msg);
return “msg handled success”;
}
}
import com.mop.ice.serv.MessageServiceIceImpl;
import Ice.Communicator;
import IceBox.Service;
public class MessageServiceI extends Ice.ObjectImpl implements Service {
/**
*
*/
private static final long serialVersionUID = 43338146304475187L;
private Ice.ObjectAdapter _adapter;
@Override
public void start(String name, Communicator ci, String[] args) {
_adapter=ci.createObjectAdapter(name);
_adapter.add(new MessageServiceIceImpl(), Ice.Util.stringToIdentity(“IceBoxTest”));
_adapter.activate();
}
@Override
public void stop() {
if(_adapter!=null){
_adapter.deactivate();
}
}
}
<icegrid>
<application name=”testIceBoxApp”> <!– 必须设置应用的名称 –>
<replica-group id=”testIceBoxReplicaGroup”> <!– 对特定类型的icebox服务提供负载均衡策略 –>
<load-balancing type=”adaptive” /> <!– 有random、adaptive、round-robin、ordered 这4中负载均衡策略 –>
<object identity=”IceBoxTest”
type=”::com::mop::interf::generated::_MessageServiceIceDisp” />
</replica-group>
<node name=”MyNode2″> <!– 必须指定节点的名称,且该名称不能与其它节点名称同名 –>
<icebox id=”testIceBox” <!– 必须指定icebox的id,且在MyNode2节点中,次名字必须唯一 –>exe=”C:\Program Files\Java\jdk1.7.0_09\bin\java.exe”> <!– 指定可执行程序路径 –><option>-server</option>
<option>-classpath</option>
<option>-Djava.ext.dirs=D:\ice_service\lib</option>
<!– <env>CLASSPATH=D:\ice_service\lib\*</env> –> <!– 此行可以 代替上面两行 –>
<option>IceBox.Server</option> <!– 指定icebox的启动类 –>
<log path=”D:\ice_service\PassportAdminOut.log” property=”Ice.StdOut”/>
<log path=”D:\ice_service\PassportAdminErr.log” property=”Ice.StdErr”/>
<service name=”testIceAdapter” entry=”com.mop.ice.icebox.MessageServiceI”>
<adapter name=”testIceAdapter” <!– 此处的adapter名字一定要和上边service 的名字一样 –>
replica-group=”testIceBoxReplicaGroup” <!– 此处指定本服务需要的负载均衡策略 –>
/>
</service>
</icebox>
<icebox id=”testIceBox1″ exe=”C:\Program Files\Java\jdk1.7.0_09\bin\java.exe”>
<option>-server</option>
<option>-classpath</option>
<option>-Djava.ext.dirs=D:\ice_service\lib</option>
<!– <env>CLASSPATH=D:\ice_service\lib\*</env> –>
<option>IceBox.Server</option>
<log path=”D:\ice_service\PassportAdminOut.log” property=”Ice.StdOut”/>
<log path=”D:\ice_service\PassportAdminErr.log” property=”Ice.StdErr”/>
<service name=”testIceAdapter1″ entry=”com.mop.ice.icebox.MessageServiceI”>
<adapter name=”testIceAdapter1″
replica-group=”testIceBoxReplicaGroup”
/>
</service>
</icebox>
</node>
</application>
</icegrid>
import com.mop.ice.serv.CalcServiceIceImpl;
import com.mop.ice.serv.MessageServiceIceImpl;
import Ice.Communicator;
import Ice.ObjectImpl;
public class IceService {
/**
* @Description:
*
* @param args
*/
public static void main(String[] args) {
int status = 0;
Communicator ic = null;
try{
ic=Ice.Util.initialize(args);
Ice.ObjectAdapter adapter=ic
.createObjectAdapterWithEndpoints(“testAdapter”, “default -h *”);
ObjectImpl object1=new MessageServiceIceImpl();
ObjectImpl object2=new CalcServiceIceImpl();
adapter.add(object1, ic.stringToIdentity(“messageService”));
adapter.add(object2, ic.stringToIdentity(“calcService”));
adapter.activate();
ic.waitForShutdown();
}catch(Ice.LocalException le){
le.printStackTrace();
status=1;
}catch(Exception e){
e.printStackTrace();
status=2;
}
if(ic!=null){
try{
ic.destroy();
}catch(Exception e){
e.printStackTrace();
status=3;
}
}
System.exit(status);
}
}2、将app.xml配置文件修改如下:<?xml version=”1.0″ encoding=”UTF-8″ ?>
<icegrid>
<application name=”testApp”>
<replica-group id=”ReplicatedTestAdapter”>
<load-balancing type=”adaptive” load-sample=”1″ n-replicas=”1″/>
<object identity=”IceBoxTest”type=”::com::mop::interf::generated::_MessageServiceIceDisp” />
<object identity=”calcService”
type=”::com::mop::ice::serv::CalcServiceIceImpl” />
</replica-group><server-template id=”testServerTemplate”>
<parameter name=”index”/>
<parameter name=”servClass”/>
<parameter name=”exepath” default=”C:\Program Files\Java\jdk1.7.0_09\bin\java”/>
<server id=”testServer${index}”
exe=”${exepath}”
activation=”on-demand”>
<option>-server</option>
<option>-classpath</option>
<option>C:\Program Files\ZeroC\Ice-3.4.1\bin</option>
<option>-Djava.ext.dirs=D:\ice_service\lib</option>
<option>${servClass}</option>
<adapter name=”testAdapter”
replica-group=”ReplicatedTestAdapter”
endpoints=”tcp”/>
</server>
</server-template><node name=”MyNode1″>
<server-instance template=”testServerTemplate”
index=”1″
servClass=”com.mop.ice.IceService”/>
</node><!–
<node name=”MyNode2″>
<server-instance template=”testServerTemplate”
index=”2″/>
</node>
–>
</application>
</icegrid>3、将第一步写好的IceService 类随同前一部分的内容重新打包,并放到指定的lib目录中
4、执行命令:
> icegridadmin -u test -p test –Ice.Default.Locator=”IceGrid/Locator:tcp -p 4061:tcp -p 5061″ -e “application update \’app.xml\’ “
5、使用前一部分编写好的客户端进行测试,即可成功!