Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
嗝屁小孩纸
guide-rpc-framework
提交
0d7c7cdc
G
guide-rpc-framework
项目概览
嗝屁小孩纸
/
guide-rpc-framework
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
1
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
guide-rpc-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
0d7c7cdc
编写于
9月 17, 2020
作者:
G
guide
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[refractor]update readme & some comment
上级
e42ce6a5
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
30 addition
and
29 deletion
+30
-29
README.md
README.md
+2
-1
rpc-framework-simple/src/main/java/github/javaguide/remoting/transport/netty/codec/DefaultDecoder.java
...aguide/remoting/transport/netty/codec/DefaultDecoder.java
+14
-14
rpc-framework-simple/src/main/java/github/javaguide/remoting/transport/netty/codec/enums/SerializableEnum.java
...emoting/transport/netty/codec/enums/SerializableEnum.java
+4
-4
rpc-framework-simple/src/main/java/github/javaguide/remoting/transport/netty/codec/kyro/NettyKryoEncoder.java
...remoting/transport/netty/codec/kyro/NettyKryoEncoder.java
+10
-10
未找到文件。
README.md
浏览文件 @
0d7c7cdc
...
...
@@ -73,9 +73,10 @@
-
[x]
**客户端调用远程服务的时候进行负载均衡**
:调用服务的时候,从很多服务地址中根据相应的负载均衡算法选取一个服务地址。ps:目前只实现了随机负载均衡算法。
-
[x]
**处理一个接口有多个类实现的情况**
:对服务分组,发布服务的时候增加一个 group 参数即可。
-
[x]
**集成 Spring 通过注解注册服务**
-
[x]
**集成 Spring 通过注解进行服务消费**
-
[
x] **集成 Spring 通过注解进行服务消费**
。参考: [PR#10
](
https://github.com/Snailclimb/guide-rpc-framework/pull/10
)
-
[x]
**增加服务版本号**
:建议使用两位数字版本,如:1.0,通常在接口不兼容时版本号才需要升级。为什么要增加服务版本号?为后续不兼容升级提供可能,比如服务接口增加方法,或服务模型增加字段,可向后兼容,删除方法或删除字段,将不兼容,枚举类型新增字段也不兼容,需通过变更版本号升级。
-
[x]
**对 SPI 机制的运用**
-
[
x] 扩充 rpc 协议,增加序列化协议字段,服务端可以根据消息体中的序列化协议动态选择序列化器。参考: [PR#14
](
https://github.com/Snailclimb/guide-rpc-framework/pull/14
)
-
[ ]
**增加可配置比如序列化方式、注册中心的实现方式,避免硬编码**
:通过 API 配置,后续集成 Spring 的话建议使用配置文件的方式进行配置
-
[ ]
**客户端与服务端通信协议(数据包结构)重新设计**
,可以将原有的
`RpcRequest`
和
`RpcReuqest`
对象作为消息体,然后增加如下字段(可以参考:《Netty 入门实战小册》和 Dubbo 框架对这块的设计):
-
**魔数**
: 通常是 4 个字节。这个魔数主要是为了筛选来到服务端的数据包,有了这个魔数之后,服务端首先取出前面四个字节进行比对,能够在第一时间识别出这个数据包并非是遵循自定义协议的,也就是无效数据包,为了安全考虑可以直接关闭连接以节省资源。
...
...
rpc-framework-simple/src/main/java/github/javaguide/remoting/transport/netty/codec/DefaultDecoder.java
浏览文件 @
0d7c7cdc
...
...
@@ -16,17 +16,17 @@ import java.util.List;
/**
* 自定义解码器。负责处理"入站"消息,将消息格式转换为我们需要的业务对象
*
協議格式
*
*
协议格式:
*
<p>
* | length | serializable id | body length | body data |
* | 1 | 2 | 3 | 4 |
*
*
1、大端4字節整數
,等于2、3、4长度总和
*
2、大端4字節整數,序列化方法的序號
*
3、body 長度 大端4字節整數,具體為4的長
度
*
<p>
*
1、大端4字节整数
,等于2、3、4长度总和
*
2、大端4字节整数,序列化方法的序号
*
3、body 长度 大端4字节整数,具体为4的长
度
* 4、body 內容
*
@author shuang.kou
* @author
: tydhot
(583125614@qq.com)
*
* @author
shuang.kou & tydhot
(583125614@qq.com)
* @createTime 2020年05月25日 19:42:00
*/
@AllArgsConstructor
...
...
@@ -76,7 +76,7 @@ public class DefaultDecoder extends ByteToMessageDecoder {
in
.
resetReaderIndex
();
return
;
}
// 6.
讀取選擇
序列化方式
// 6.
读取选择
序列化方式
int
serializableId
=
in
.
readInt
();
String
serializerKey
=
SERIALIZABLE_MAP
.
get
(
serializableId
);
// 7.不支持的序列化方式,返回
...
...
@@ -84,11 +84,11 @@ public class DefaultDecoder extends ByteToMessageDecoder {
in
.
resetReaderIndex
();
return
;
}
// 8.
選擇
序列化器
// 8.
选择
序列化器
Serializer
serializer
=
ExtensionLoader
.
getExtensionLoader
(
Serializer
.
class
).
getExtension
(
serializerKey
);
// 9.
開始讀
取body長度
// 9.
开始读
取body長度
int
dataLength
=
in
.
readInt
();
// 10.
開
始序列化
// 10.
开
始序列化
byte
[]
body
=
new
byte
[
dataLength
];
in
.
readBytes
(
body
);
// 将bytes数组转换为我们需要的对象
...
...
rpc-framework-simple/src/main/java/github/javaguide/remoting/transport/netty/codec/enums/SerializableEnum.java
浏览文件 @
0d7c7cdc
...
...
@@ -4,8 +4,8 @@ import lombok.AllArgsConstructor;
import
lombok.Getter
;
/**
* @author
:
tydhot (583125614@qq.com)
* @
date:2020/9/9
* @author tydhot (583125614@qq.com)
* @
createTime 2020年09月9日
**/
@AllArgsConstructor
@Getter
...
...
@@ -13,8 +13,8 @@ public enum SerializableEnum {
KYRO
(
1
,
"kyro"
);
private
Integer
serializableId
;
private
final
Integer
serializableId
;
private
String
serializableKey
;
private
final
String
serializableKey
;
}
rpc-framework-simple/src/main/java/github/javaguide/remoting/transport/netty/codec/kyro/NettyKryoEncoder.java
浏览文件 @
0d7c7cdc
...
...
@@ -8,14 +8,14 @@ import io.netty.handler.codec.MessageToByteEncoder;
import
lombok.AllArgsConstructor
;
/**
*
協議格式
*
*
协议格式:
*
<p>
* | length | serializable id | body length | body data |
* | 1 | 2 | 3 | 4 |
*
*
1、大端4字節整數
,等于2、3、4长度总和
*
2、大端4字節整數,序列化方法的序號
*
3、body 長度 大端4字節整數,具體為4的長
度
*
<p>
*
1、大端4字节整数
,等于2、3、4长度总和
*
2、大端4字节整数,序列化方法的序号
*
3、body 长度 大端4字节整数,具体为4的长
度
* 4、body 內容
* 自定义编码器。负责处理"出站"消息,将消息格式转换字节数组然后写入到字节数据的容器 ByteBuf 对象中。
* <p>
...
...
@@ -34,7 +34,7 @@ public class NettyKryoEncoder extends MessageToByteEncoder<Object> {
/**
* 将对象
進行
序列化然后写入到 ByteBuf 对象中
* 将对象序列化然后写入到 ByteBuf 对象中
*/
@Override
protected
void
encode
(
ChannelHandlerContext
channelHandlerContext
,
Object
o
,
ByteBuf
byteBuf
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录