RPC远程调用及常用框架之ICE

本文详细介绍ICE RPC框架的安装、配置与应用过程,包括如何编写ICE文件、生成代码、搭建SpringBoot项目、实现服务端与客户端调用,以及展示实际效果。

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

说明

上一章我们介绍了RPC远程调用及常用框架之Thrift,ice也和他一样是跨语言的,所以也有一个安装程序来生成目标语言,接下来我们一起探索

安装ice

下载

这里直接去官网下载
ice官网
注意:
在这里插入图片描述
进入下载页面,点击相应版本,发现没有反应(原本该跳转到页面下方,指定的锚点处)
在这里插入图片描述
不急做程序的,我们f12后搜索msi直接访问链接就可以下载了
在这里插入图片描述

注意:
这里我下载的3.7后使用有问题,所以最终下载了3.6而且很慢建议空闲时下载好

安装

这里就双击运行下载的文件,然后在path环境变量中配置好就可以了
在末尾加上,D:\Ice-3.6.5\bin,就可以了
在这里插入图片描述
在这里插入图片描述

生成目标代码

编写ice文件-

如下:hello.ice

[["java:package:com.gs.ice"]]
module service{     //包名        具体生成的包为: 父包结构 + 包名      

    interface HelloService{ //接口名  不能用Ice作为接口名的开头

        string sayHello(string s);  //类型都是小写开头,常用的有string,int,long

    };

};

生成相关代码目录

运行命令
在这里插入图片描述
查看目录结构
在这里插入图片描述

构建项目

新建一个springboot项目

建好后将生成的包复制到项目里

在这里插入图片描述
我们这里需要加入ice的依赖
3.6.5ice依赖找到相关maven依赖

在这里插入图片描述
粘贴到项目pom中
在这里插入图片描述
到此项目搭建完成,大家可以用子模块方式因为客户端和服务端都需要父模块的依赖

实现服务

/**
 * @auther 高松
 * @DATE 2019/9/3  20:37
 * ice-test
 */

public class HelloServiceI extends _HelloServiceDisp {
    @Override
    public String sayHello(String s, Current __current) {
        System.out.println(s+"调用成功!");
        return null;
    }
}

服务端将服务提供出去

@SpringBootApplication
public class ServerTestApplication {

	public static void main(String[] args) {
		SpringApplication.run(ServerTestApplication.class, args);
		int status = 0;
		Ice.Communicator ic = null;
		try {
			//初始化连接,args可以传一些初始化参数,如连接超时,初始化客户端连接池的数量等
			ic = Ice.Util.initialize(args);
			//创建名为SimpleHelloAdapter的适配器,并要求适配器使用缺省的协议(TCP/IP 端口为10000的请求)
			Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("SimpleHelloAdapter", "default -p 10000");
			//实例化一个Printer对象,为Printer接口创建一个服务对象
			Ice.Object object = new HelloServiceI();
			//将服务单元增加到适配器中,并给服务对象指定名称为SimpleHello,该名称用于唯一确定一个服务单元
			adapter.add(object, Ice.Util.stringToIdentity("SimpleHello"));
			//激活适配器
			adapter.activate();
			//让服务在退出之前,一直持续对请求的监听
			ic.waitForShutdown();
		} catch (Exception e) {
			e.printStackTrace();
			status = 1;
		}finally{
			if(ic!=null){
				ic.destroy();
			}
		}
		System.exit(status);

	}

}

客户端调用

@SpringBootApplication
public class ClientTestApplication {

	public static void main(String[] args) {
		SpringApplication.run(ClientTestApplication.class, args);
		Ice.Communicator ic = null;
		try {
			//初始化通信器
			ic = Ice.Util.initialize(args);
			//传入远程服务单元的名称、网络协议、IP以及端口,获取helloService的远程代理,这里使用stringToProxy方式
			Ice.ObjectPrx base = ic.stringToProxy("SimpleHello:default -p 10000");
			//通过checkedCast向下转型,获取helloService接口的远程,并同时检测根据传入的名称获取服务单元是否helloService的代理接口,如果不是则返回null对象
			HelloServicePrx hello = HelloServicePrxHelper.checkedCast(base);
			if(hello == null){
				throw new Error("Invalid proxy");
			}
			//把寂寞传给服务端,让服务端打印出来,因为这个方法最终会在服务端上执行
			hello.sayHello("寂寞");
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(ic != null){
				ic.destroy();
			}
		}

	}

}

效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值