https://github.com/threadnew/powerrpc
一款基于zookeeper、netty的小型的分布式的rpc框架
https://github.com/threadnew/powerrpc
java netty nettyrpc reflection rpc zookeeper
Last synced: 11 months ago
JSON representation
一款基于zookeeper、netty的小型的分布式的rpc框架
- Host: GitHub
- URL: https://github.com/threadnew/powerrpc
- Owner: ThreadNew
- License: apache-2.0
- Created: 2020-11-10T14:14:49.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2020-11-11T13:56:04.000Z (about 5 years ago)
- Last Synced: 2025-01-11T04:44:15.614Z (about 1 year ago)
- Topics: java, netty, nettyrpc, reflection, rpc, zookeeper
- Language: Java
- Homepage:
- Size: 55.7 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PowerRPC
> PowerRPC是一款基于zookeeper、netty的小型的分布式的rpc框架
---
##### 特点
- 注册中心可定制化;目前服务发现和服务注册采用zookeeper
- 支持TCP的长连接
- 支持不同的负载均衡的策略,可定制化。注:已实现策略 随机、加权随机
- 消息序列化采用messagepack
- 支持同步和异步调用
- 支持配置文件配置
---
#### 入门案例
#### **服务端**
##### 1、配置文件
```java
power.rpc.registry.server.ip=192.168.168.135:2181 #zookeeper的注册中心的地址
power.rpc.server.name=myapp # 服务的名称 唯一标志
power.rpc.server.port=8311 # 服务的端口号
```
##### 2、创建简单的服务
> 创建接口及其实现类
```java
package tn.threadnew.powerrpc.info;
public interface UserInfo {
public String getName(String name);
public int add(int a,int b);
public String acc(String a, int b);
}
```
impl
```java
package tn.threadnew.powerrpc.info;
import tn.threadnew.powerrpc.rpc.netty.annotation.RpcService;
/**
* @Author: ThreadNew
* @Description: TODO
* @Date: 2020/11/4 22:04
* @Version: 1.0
*/
@RpcService(version = "1.0", group = "info")
public class Stu implements UserInfo {
@Override
public String getName(String name) {
return name;
}
@Override
public int add(int a, int b) {
return a + b;
}
public String acc(String a, int b) {
return a + " cen " + b;
}
}
```
> 在具体的服务上加上@RpcService服务注解即可。
>
> @RpcService的参数讲解
>
> version :服务的版本号
>
> group:服务分组 :其作用是区别同一接口的不同实现类
##### 3、服务端的使用
```java
public class Server {
private ServerProxy sp = ServerProxy.newInstance();
@Test
public void start() throws Exception {
ZkConnectManager zk = new ZkConnectManager();
zk.load("zk.properties");
sp.scan("tn.threadnew.powerrpc.info").setRegister(zk).setConfig(zk.getConfig()).connect();
// Thread.sleep(5000000);
}
}
```
> 第一步: 创建与注册中心连接的管理器如ZkConnectManager ,
>
> 第二步:使用load函数加载配置文件
>
> 第三步: 创建服务代理器ServerProxy;使用newInstance() 函数创建对象
>
> 第四步:配置包扫描的路径 采用scan函数
>
> 第五步:注册注册中心;注册配置中心。
>
> 第六步:建立连接。
>
>
**客户端**
##### 1、配置文件
```java
power.rpc.registry.server.ip=192.168.168.135:2181 #zookeeper的注册中心的地址
```
##### 2、服务调用
> 提供要调用的接口
```java
public interface UserInfo {
public String getName(String name);
public int add(int a,int b);
public String acc(String a, int b);
}
```
> 与注册中心建立连接
>
> 调用远程服务
```java
package tn.threadnew.powerrpc.rpc;
import org.junit.Test;
import tn.threadnew.powerrpc.info.UserInfo;
import tn.threadnew.powerrpc.register.manage.ZkConnectManager;
import tn.threadnew.powerrpc.rpc.netty.client.proxy.Proxy;
/**
* @Author: ThreadNew
* @Description: TODO
* @Date: 2020/11/4 22:29
* @Version: 1.0
*/
public class client {
// 第一步: 创建调用服务代理类
private Proxy proxy = Proxy.newInstance();
@Test
public void Test() throws Exception {
// 第二步:创建注册中心管理器
ZkConnectManager zk = new ZkConnectManager();
//第四步:加载配置文件
zk.load("zk.properties");
//第五步:注册注册中心且建立连接
proxy.setRegister(zk).connect();
//第六步: 调用服务
UserInfo info = proxy.instance(UserInfo.class, "1.0", "info");
System.out.println(info.add(2, 3));
UserInfo info1 = proxy.call(UserInfo.class, "1.0", "info", new ResponseCallBack() {
@Override
public void done(Object o) {
Response re = (Response) o;
System.out.println("data " + re.getData());
}
});
info1.acc("che c", 7);
Thread.sleep(50000);
proxy.close();
}
}
结果
5
data che c cen 7
```
> 服务的调用方式两种 **同步调用**和**异步调用**
>
> 1、 同步调用
>
> ```java
> 方法:instance(Class clazz, String version, String group)
> clazz :服务接口的class对象
> version: 服务的版本号
> group: 服务分组
> ```
> 2、异步调用
>
> ```
> 方法:call(Class clazz, String version, String group, ResponseCallBack callBack)
> clazz :服务接口的class对象
> version: 服务的版本号
> group: 服务分组
> callback :异步回调函数 重写done方法。
> ```