TIANAI-RPC
-
https://gitee.com/tianai/tianai-rpc TIANAI-RPC 码云地址
-
https://gitee.com/tianai/tianai-rpc-springboot-starter TIANAI-RPC 的springboot快速启动包
-
如果有兴趣想一起参与的小伙伴欢迎加QQ群:1021884609
-
笔者为什么写这个RPC框架呢?? 这一切都要从一只蝙蝠说起... 苦思冥想一晚上不得解, 为什么要吃蝙蝠? 难道是想上天???
-
瘟疫满天飞
-
工作不得找
-
花呗天天催
-
血从心中流
笔者在兼职都找不到,工作又找不到的双重鼓励下
笔者头悬梁锥刺股耗尽心血写出这个看似很牛x的RPC框架
该RPC框架目前实现有
- 基于zookeeper的服务注册
- 增加基于nacos的服务注册
- 基于Netty实现的远程通讯
- 基于hessian2实现的序列化、反序列化
- 实现了基于轮询策略的负载均衡
- 使用Netty自带的心跳机制实现心跳机制
- 实现网络抖动后造成的链接断开后重连
该RPC框架的稳定性通过本人基本测试,亦可用于中小型rpc通讯,比dubbo更加轻量
TIANAI-RPC基本使用
- server端:
public class RpcServerImplTest2 {
public static void main(String\[\] args) throws InterruptedException {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.codec("hessian2")
.timeout(5000)
// 设置服务注册为zookeeper, 支持zookeeper和nacos两个服务注册
.registry(new URL("zookeeper", "127.0.0.1", 2181))
.server("netty")
.port(20881)
.start();
// 注册
serverBootstrap.register(Demo.class, new DemoImpl());
System.out.println("启动成功");
TimeUnit.HOURS.sleep(1);
}
}
- 客户端
public class RpcClientTest {
public static void main(String\[\] args) {
RpcClientConfiguration prop = new RpcClientConfiguration();
// 序列化,默认是hessian2
prop.setCodec("hessian2");
// 超时,默认是5000
prop.setTimeout(5000);
// 请求超时,默认是3000
prop.setRequestTimeout(3000);
// 设置客户端为netty, 默认是netty
prop.setProtocol("netty");
// 服务注册,目前支持 zookeeper和nacos两个, 默认是zookeeper
// 设置服务注册 , 为nacos
// URL nacosConf = new URL("nacos", "127.0.0.1", 8848);
// nacosConf = nacosConf.addParameter("namespace", "1ca3c65a-92a7-4a09-8de1-4bfe1c89d240");
// 设置服务注册 为zookeeper
prop.setRegistryUrl(new URL("zookeeper", "127.0.0.1", 2181));
// 注册器
// 远程 客户端
RpcProxy<Demo> rpcProxy = new JdkRpcProxy<>();
Demo proxy = rpcProxy.createProxy(Demo.class, prop, true, true);
for (int i = 0; i < 20; i++) {
// 执行RPC请求
String res = proxy.sayHello();
System.out.println("rpc调用返回数据:" + res);
}
}
}
和springboot整合版本
https://gitee.com/tianai/tianai-rpc-springboot-starter 码云地址
使用方式:
- server端
- springboot项目中导入依赖:
<dependency>
<groupId>cloud.tianai.rpc</groupId>
<artifactId>tianai-rpc-springboot-starter</artifactId>
<version>1.2.1</version>
</dependency>
- 相关配置
tianai-rpc:
# 服务注册, 默认 zookeeper
registry:
name: zookeeper # 支持zookeeper和nacos
# 服务注册的地址, 默认 127.0.0.1:2181
address: 127.0.0.1:2181 # 地址
# otterProp: 配置nacos一些其他配置时这样配置,比如配置namespace
# namespace: xxx
# 序列化 默认hessian2
codec: hessian2
server:
# server端是否启动, 如果使用rpcServer,必须设置为true, 默认是false
enable: true
# server端启动时的端口, 默认20881
port: 20883
# 超时,单位 ms
timeout: 5000
- 要提供RPC服务的类上加上 @RpcProvider注解即可
@Service
@RpcProvider
public class DemoServiceImpl implements DemoService {
}
-
client端
- 相关配置
tianai-rpc:
registry:
# 指定服务注册 为nacos,默认zookeeper
name: nacos
# 指定注册地址 默认 127.0.0.1:2181
address: 127.0.0.1:8848
otterProp:
# 配置nacos命名空间
namespace: 1ca3c65a-92a7-4a09-8de1-4bfe1c89d240
# 指定序列化,默认hessian2
codec: hessian2
2. 要使用RPC服务的接口的field中加上 **@RpcConsumer** 注解即可
@RestController
public class DemoController {
@RpcConsumer
private DemoService demoService;
@GetMapping("/port")
public Integer getPort() {
demoService.toString();
return demoService.getPort();
}
}
一些其他的相关配置详见:
- RpcConsumerProperties.java
- RpcProperties.java
- RpcProviderProperties.java
来源:oschina
链接:https://my.oschina.net/u/4136530/blog/3163686