IceGrid 服务初次搭建【Java】

本文详细介绍了如何使用Java进行IceGrid服务的搭建,包括编写ICE接口、实现接口类、创建服务、编写客户端,以及配置server.cfg、client.cfg、registry.cfg等文件,最后进行测试。

1.编写ice接口

    module Demo {  
        interface Printer  
        {  
            void printString(string s);  
        };  
    };  

2.实现接口类

    package Demo;  
      
    import org.apache.log4j.Logger;  
      
    import Ice.Current;  
      
    /** 
     * ice  java  server 业务实现类 
     * @author peidw 
     * 
     */  
    public class PrinterImpl extends _PrinterDisp {  
        /** 
         *  
         */  
        private static final long serialVersionUID = 4526797879081429219L;  
        private static Logger logger=Logger.getLogger("");  
           
        @Override  
        public void printString(String s, Current __current) {  
            // TODO Auto-generated method stub  
            System.out.println("-----------------"+s);  
            logger.info("收到请求:"+s);  
        }  
          
    }  

3.编写service

    package Demo;  
      
    /** 
     * ice 例子 部署 在icegrid 里,运行server类必须继承Ice.Application 
     *  
     * @author peidw 
     * 
     */  
    public class PrinterServer extends Ice.Application {  
        @Override  
        public int run(String[] args) {  
            System.out.println("~~~~~~~~~~服务器开始启动~~~~~~~~~~~~~");  
            if (args.length > 0) {  
                System.err.println(appName() + ": too many arguments");  
                return 1;  
            }  
      
            Ice.ObjectAdapter adapter = communicator().createObjectAdapter("PrinterAdapter");  
            Ice.Properties properties = communicator().getProperties();  
            Ice.Identity id = communicator().stringToIdentity(properties.getProperty("Identity"));  
            System.out.println("Ice.Identity id =" + id.name);  
            Ice.Object object = new PrinterImpl();  
            adapter.add(object, communicator().stringToIdentity("SimplePrinter"));  
            adapter.activate();  
            communicator().waitForShutdown();  
            return 0;  
        }  
      
        static public void main(String[] args) {  
            System.out.println("**********服务器启动了***********");  
            PrinterServer app = new PrinterServer();  
            String conf = "D:\\ice\\demo2\\pserver.cfg";  
            int status = app.main("Server", args, conf);  
            System.exit(status);  
        }  
    }  

4.编写client

    package Demo;  
      
    public class PrinterClient extends Ice.Application{  
        @Override  
        public int run(String[] args) {    
            System.out.println("~~~~~~~~~~~客户端开始测试~~~~~~~~~~~~~~~~~~");  
            //获取Printer的远程代理,这里使用的stringToProxy方式    
            Ice.ObjectPrx base = communicator().stringToProxy("SimplePrinter");    
            //通过checkedCast向下转换,获取Printer接口的远程,并同时检测根据传入的名称获取的服务单元是否Printer的代理接口,如果不是则返回null对象    
            Demo.PrinterPrx printer = Demo.PrinterPrxHelper.checkedCast(base);    
            if (printer == null) throw new Error("Invalid proxy");    
            //把Hello World传给服务端,让服务端打印出来,因为这个方法最终会在服务端上执行    
            for(int i = 0;i<10;i++){    
                 printer.printString("xxxxxxxxxxxxxxxxxx     "+i);;    
                 
            }    
            return 0;    
        }    
          
         public static void main(String[] args){  
             System.out.println("**************客户端开始测试*****************");  
             PrinterClient app = new PrinterClient();    
             System.exit(app.main("client", args,"D:\\ice\\demo2\\client.cfg"));     
         }  
    }  

项目结构:


5.创建server.cfg和client.cfg文件

server.cfg内容:

    PrinterAdapter.AdapterId=PrinterAdapter  
    PrinterAdapter.Endpoints=tcp  

client.cfg内容:

    Ice.Default.Locator=SzcIceGrid/Locator:tcp -h 192.168.1.55 -p 4061  

6.编写registry.cfg文件

    IceGrid.InstanceName=SzcIceGrid    
    #客户端连接到注册中心的地址    
    IceGrid.Registry.Client.Endpoints=tcp -p 4061  
    IceGrid.Registry.Server.Endpoints=tcp  
    IceGrid.Registry.Internal.Endpoints=tcp  
    IceGrid.Registry.PermissionsVerifier=SzcIceGrid/NullPermissionsVerifier  
    IceGrid.Registry.AdminPermissionsVerifier=SzcIceGrid/NullPermissionsVerifier  
    #注册中心数据保存路径,需要手动创建文件夹  
    IceGrid.Registry.Data=D:\ice\demo2\registry  
    IceGrid.Registry.DynamicRegistration=1  
    Ice.Admin.InstanceName=AdminInstance  
    Ice.Admin.ServerId=Admin  

7.编写node1.cfg文件

# 注册中心地址    
Ice.Default.Locator=SzcIceGrid/Locator:tcp -h 127.0.0.1 -p 4061    
#node名    
IceGrid.Node.Name=node1    
IceGrid.Node.Endpoints=tcp    
#node存储路径    
IceGrid.Node.Data=D:\ice\demo2\node1  
IceGrid.Node.Output=D:\ice\demo2\node1  
IceGrid.Node.CollocateRegistry=0  

8.编写app.xml文件

    <icegrid>  
        <application name="PrinterApplication">  
            <node name="node1">  
                <server id="PrinterServer" exe="java" activation="on-demand">  
                    <adapter name="PrinterAdapter" endpoints="tcp -h 127.0.0.1">  
        <span style="white-space:pre">        </span><object identity="SimplePrinter" type="::Demo::Printer" property="Identity"/>  
            </adapter>  
                    <option>-jar</option>    
                    <option>D:\code\Spring\testIceGrid_2\target\testIceGrid-0.0.1-SNAPSHOT.jar</option>     
                    <property name="Ice.Trace.Network" value="1"/>  
                    <properties>    
                        <property name="Ice.ThreadPool.Server.SizeMax" value="1" />    
                    </properties>    
    <span style="white-space:pre">    </span>    <span style="white-space:pre">   </span><property name="IceMX.Metrics.Debug.GroupBy" value="id"/>  
                <property name="IceMX.Metrics.Debug.Disabled" value="1"/>  
                <property name="IceMX.Metrics.ByParent.GroupBy" value="parent"/>  
                <property name="IceMX.Metrics.ByParent.Disabled" value="1"/>                                  
                </server>  
            </node>  
        </application>  
    </icegrid>  

9.修改jar包中的MANIFEST.MF文件中,添加依赖

    nifest-Version: 1.0  
    Class-Path: lib/ice-3.6.3.jar lib/icebox-3.6.3.jar lib/log4j-1.2.17.jar   
    Main-Class: Demo.PrinterServer  

10.建对应的目录结构

eg:D:\ice\demo2\node1

11.配置文件目录结构


12.测试

1、icegridregistry --Ice.Config=registry.cfg   
2、icegridnode --Ice.Config=node1.cfg
3、icegridadmin --Ice.Config=node1.cfg   在node1节点上启动,然后添加app.xml配置文件
application add 文件名,添加配置文件
application remove 文件名,删除配置文件
4、在ice的安装包中,找到bin\icegridgui.jar,然后以java -jar icegridgui.jar运行,然后就可以查看各节点信息,
也可以开启服务





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值