# fitz-rpc **Repository Path**: tuke-code/fitz-rpc ## Basic Information - **Project Name**: fitz-rpc - **Description**: 基于netty的轻量级rpc框架实现,目前注册中心采用nacos。写这个仅为学习RPC实现原理 ,想了解RPC实现原理可以参考~ Netty+Nacos+Hession2+Spring - **Primary Language**: Java - **License**: AFL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-03-11 - **Last Updated**: 2024-07-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### fitz-rpc 轻量rpc框架 **demo**,仅为学习RPC实现原理 。。。 RPC (Remote Procedure Call) 像调用本地服务一样调用远程服务接口 基于tcp协议 序列化可采用hessian 和 json ##### Quick Start 1.启动nacos 2.启动demo-provider 3.启动demo-consumer 浏览器直接访问: ------------------------- ##### 配置方式 1.引用fitz-core包 ``` com.fitz fitz-core 1.0-SNAPSHOT ``` 2. 在配置文件中配置服务提供者的ip和端口,netty服务端口默认使用服务端口+1000,如server.port=8080,netty服务端口为9080 ``` fitz: rpc: service-name: ${spring.application.name} serializer-type: HESSION # server-port: 7776 registry-address: 127.0.0.1:8848 min-pool-size: 1 max-pool-size: 10 ``` 3.在启动类上标注 `@EnableRpc` 即表示为rpc远程调用服务 4.暴露服务,在要暴露的服务上使用注解`@RpcService`即可,该注解已经继承spring的`@Service`注解,不需要重复标记 5.引用服务,在具体的远程调用服务接口上标注 `@RpcReference` ,可选参数如下 ```$xslt public @interface RpcReference { /**重试次数*/ int retry() default 2; /**超时时间*/ long timeout() default 6000L; /**服务提供者地址 127.0.0.1:7776*/ String address() default ""; /**负载均衡*/ Class loadBalance() default RandomLoadBalance.class; /**集群容错策略*/ ClusterStrategy clusterStrategy() default ClusterStrategy.FAIL_FAST; ``` 5.参考demo模块例子 ##### 2020-5-21 20:27 增加集群容错策略 目前支持`failfast`、`failover` ##### TODO - [ ] 不同协议支持 - [x] tcp私有协议 - [ ] http - [x] 序列化 - [x] hessian2 - [x] json - [x] 路由策略 - [x] 随机 - [x] 第一个 - [ ] 轮询 - [x] 集群容错机制 - [x] failfast - [x] failover - [ ] 注册中心 - [ ] zookeeper - [x] nacos - [ ] 服务订阅发布 - [x] 连接池 - [ ] 不同调用方式 - [ ] 同步 - [x] 异步 #### 2021年05月01日21:47 ~~1. 目前存在设计问题,将provider和consumer分开了。实际上一个服务是可能既作为服务提供者又作为服务消费者的~~ ~~2. 引入的服务可能有多个,那怎么知道是对应什么服务,怎么找服务地址?通过接口名匹配服务地址?~~ ~~3. 服务内部自己调用自己是不需要走rpc的~~