Spring实现Ice客户端-服务端模拟
Ice简介
Ice是ZeroC的开源通信产品,是一个面向对象的中间件,全程为:The Internet Communications Engine。其作为一款优秀的RPC工具,不仅性能强劲,而且支持多平台多语言开发,即服务端和客户端使用到的开发语言可以是不同的。Ice让我们能够以最小的代价去构建分布式应用,只需要专注业务逻辑即可,底层的通讯逻辑完全由ICE帮我们封装实现。
另一方面,Ice也算是一款老牌RPC框架,其已经有十多年的沉淀,不仅支持服务器端的RPC调用,也支持移动设备,使得开发起来更为方便。其客户端与服务端的架构如下:
该架构图显示应用之间使用Ice作为中间件平台,客户端及服务的的应用都是由应用代码即Ice的库代码混合组成的,且两者使用的开发语言甚至都不同。上述代理是根据Slice定义的ice文件实现,它提供了一个向下调用的接口,提供了数据的序列化与反序列化。Ice的核心部分提供了客户端与服务端的网络连接等核心通信功能,以及其他的网络通信功能的实现及可能问题的处理。
Ice安装
官网地址:https://zeroc.com/downloads/ice/3.7/java
安装时注意Add Path,以减少配置环境变量环节。
// 测试Ice编译器安装成功
slice2java -v
Slice
Slice是使用Ice所必须编写的一个中间文件,常用来生成代理对象,其全程为 Specification Language for Ice ,作为在服务端与客户端之间调用所使用到的一门中间语言,其有自身的语法,与java其实还挺相似。
学习参考文章:https://blog.csdn.net/kaede999/article/details/39337475
Spring下实现实例
新建ice包
在Spring启动类目录新建ice包,如下:
1 | ice/client————ice客户端目录 |
编写slice文件
首先需要编写一个Slice文件,文件必须以.ice结尾,如下定义一个 HelloWorldIDL.ice 文件:
文件位置:ice/slice/HelloWorldIDL.ice
1 | [["java:package:xxx.xxx"]] |
Ice生成通用服务类
// 进入到HelloWorldIDL.ice文件路径,cmd执行命令生成通用服务类
slice2java HelloWorldIDL.ice
在test包下生成的java服务类
移动JAVA服务类下所有文件到ice/slice2java包下,删除test包。
Spring引入gradle依赖
1
2 // https://mvnrepository.com/artifact/com.zeroc/ice
implementation group: 'com.zeroc', name: 'ice', version: '3.7.3'
新建一个服务实现类 HelloWorldHandler
文件位置:ice/servant/HelloWorldHandler.java
1 | public class HelloWorldHandler implements HelloWorldIDL { |
新建一个服务端 HelloWorldServer
注册并监听请求的一个类
文件位置:ice/server/HelloWorldServer.java
1 | public class HelloWorldServer { |
新建客户端HelloWorldClient
文件位置:ice/client/HelloWorldClient.java
1 | public class HelloWorldClient { |
分别启动服务端与客户端
// 客户端控制台打印
Hello Zeroc ICE, I’m client,extra param: key-value