java ICE简单DEMO

本文介绍如何在Java项目中使用ICE框架进行RPC通信。通过在pom文件中引入ICE的jar包,定义ICE文件来创建服务接口和服务实现。接着,通过搭建服务端与客户端完成远程过程调用,并展示了一个简单的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在pom文件中加入ice的jar包

 <dependency>
            <groupId>com.zeroc</groupId>
            <artifactId>ice</artifactId>
            <version>${ice-version}</version>
        </dependency>

        <dependency>
            <groupId>com.zeroc</groupId>
            <artifactId>icebox</artifactId>
            <version>${ice-version}</version>
        </dependency>

1、编写ice文件

[["java:package:com.qn.rain"]] // 定义java包名
module demo
{
    interface MyIce
    {
        string queryMyIce(string request);
    }
}

2、用ice客户端运行之后(版本3.7.0),得到4个java文件


3、服务端的骨架类MyIceI

package com.qn.rain.demo.impl;

import com.alibaba.fastjson.JSON;
import com.qn.model.Request;
import com.qn.rain.demo.MyIce;
import com.zeroc.Ice.Current;

/**
 * Created by win 10 on 2018/6/11.
 */
public class MyIceI implements MyIce {
    @Override
    public String queryMyIce(String request, Current current) {
        System.out.println("接收到消息:" + request);
        return this.getResponse(request);
    }
}

4、搭建服务端

package com.qn.server;

import com.qn.rain.demo.impl.MyIceI;
import com.zeroc.Ice.Communicator;
import com.zeroc.Ice.Object;
import com.zeroc.Ice.ObjectAdapter;
import com.zeroc.Ice.Util;

/**
 * 启动iceServer
 * Created by win 10 on 2018/6/4.
 */
public class QueryServer {
    public static void main(String[] args) {
        int state = 0;
        Communicator communicator = null;
        try {
            // 初始化ICE通信器communicator,可以使用args传入ice初始化的参数,如:超时时间、线程池的大小等
            communicator = Util.initialize(args);
            // 撞见一个名为queryEmployeeAdapter的适配器 并且默认使用tcp协议 部署在10.0.0.1机器上 服务开启10006监听端口
            ObjectAdapter adapter = communicator.createObjectAdapterWithEndpoints("queryServer", "default -h 127.0.0.1 -p 10006");
            // 创建服务端代码实现实现类
            Object object = new MyIceI();
            // 将服务端实现类与ice对象标识符简历映射关系,并添加到ice对象适配器中
            adapter.add(object, Util.stringToIdentity("QUER_Controller"));
            // 激活对象适配器
            adapter.activate();
            System.out.println("queryServer已经激活");
            // 服务在退出之前一直保持监听状态
            communicator.waitForShutdown();
        } catch (Exception e) {
            state = 1;
            System.out.println(e);
            e.printStackTrace();
        } finally {
            if (communicator != null) {
                communicator.destroy();
            }
        }
        System.out.println("state:" + state);
    }
}

5、搭建客户端

package com.qn;

import com.qn.model.Request;
import com.qn.rain.demo.MyIcePrx;
import com.zeroc.Ice.Communicator;
import com.zeroc.Ice.ObjectPrx;
import com.zeroc.Ice.Util;

/**
 * Created by win 10 on 2018/6/4.
 */
public class QueryEmployeeClient {
    public static void main(String[] args) throws Exception{
        Communicator communicator = null;
        try {
            // 模拟传参
            Request request = new Request();
            request.setBody("我是测试request");

            // 初始化ice通信器 设置超时时间
            communicator = Util.initialize();
            // 传入远程服务单元的ice对象标识符
            ObjectPrx objectPrx = communicator.stringToProxy("QUER_Controller:default -h 127.0.0.1 -p 10006");
            // 检验是否连接上
            MyIcePrx myIcePrx = MyIcePrx.checkedCast(objectPrx);
            if(myIcePrx==null){
                System.err.println("未连接上");
                throw new Exception("没有链接成功");
            }
            String response = myIcePrx.queryMyIce(request.getBody().toString());
            System.out.println("接收成功:"+response);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

先启动服务端再启动客户端就可看到Holly world消息

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值