# avatar **Repository Path**: hsogoo/avatar ## Basic Information - **Project Name**: avatar - **Description**: 简单RPC框架,基于springboot、netty、zookeeper - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2018-09-11 - **Last Updated**: 2022-09-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # avatar #### 项目介绍 是一个基于spring、netty的RPC框架。 #### 软件架构 ![输入图片说明](https://images.gitee.com/uploads/images/2018/1024/142210_841c096a_1421983.png "avatar架构图.png") RPC调用流程图 ![输入图片说明](https://images.gitee.com/uploads/images/2018/1024/150056_89ce1cd3_1421983.png "avatar seq.png") #### 使用说明 1. 引入avatar-rpc的pom依赖 ``` com.hsogoo.avatar avatar-rpc 1.0-SNAPSHOT ``` 2. **provider** 只需在provider端加上@AvatarProvider注解 ``` @AvatarProvider(registry = "localhost:2181", group = "avatar", version = "1.0.0", limit = 100) public class UserServiceProvider implements UserService { @Override @AvatarProviderControl(limit = 30, fallback = "xxx.xxx.Class") public String sayHello(String name) { return "hello" + name; } } ``` @AvatarProvider注解 - registry如果不指定,可以通过-Davatar.registry.url=localhost:2181或者在/META-INF/app.properties中指定avatar.registry.url=localhost:2181 - group:如果不指定默认分组为avatar - version:如果不指定默认为1.0.0 - limit:服务级别限流,每秒限定为limit配置的数量(超过数量触发限流) - provider暴露的端口默认为22880,可以通过-Davatar.server.port=22880或者在/META-INF/app.properties中指定avatar.server.port=22880 @AvatarProviderControl注解 用于provider的方法级别的限流 limit:每秒限定为limit配置的数量 fallback:方法级别服务超过limit配置的数量后执行的fallback方法,需指定Fallback接口的实现的类全名。(xxx.xxx.Class) 服务限流采用guava的RateLimiter实现,采用的令牌桶算法。 3. **consumer** 只需在调用远程服务的接口上加上@AvatarInvoke注解 ``` @Service public class ConsumeUserService { @AvatarInvoke(registry = "localhost:2181",group = "avatar", version = "1.0.0", timeout="3000", limit = 30, fallback = "xxx.xxx.Class") private UserService userService; public String sayHello(String name){ return userService.sayHello(name); } } ``` @AvatarInvoke注解 - registry如果不指定,可以通过-Davatar.registry.url=localhost:2181或者在/META-INF/app.properties中指定avatar.registry.url=localhost:2181 - group如果不指定默认分组为avatar - version如果不指定默认为1.0.0 - timeout如果不指定默认为3000ms - limit:服务级别限流,每秒限定为limit配置的数量(超过数量触发限流) - fallback:方法级别服务超过limit配置的数量后执行的fallback方法,需指定Fallback接口的实现的类全名。(xxx.xxx.Class) 4. **registry** 默认的注册中心采用spi方式在/META-INF/services的com.hsogoo.avatar.registry.AvatarRegistry文件中指定 如:com.hsogoo.avatar.registry.zookeeper.ZookeeperAvatarRegistry为默认注册中心(zookeeper实现) 如配置zookeeper配置中心,需启动zookeeper 5. **serialization** 默认的序列化采用spi方式在/META-INF/services的com.hsogoo.avatar.serialization.Serializer文件中指定 如:com.hsogoo.avatar.serialization.json.JsonSerializer(fastjson实现) 默认为com.hsogoo.avatar.serialization.hessian.HessianSerializer(hessian实现) 6. **transporter** 默认基于netty实现 avatar传输协议 ``` * Protocol * ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ * 1 │ 1 │ 4 │ * ├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤ * │ │ │ * │ Flag Code Body Size Body Content │ * │ │ │ * └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘ ``` 7. **proxy** 默认采用cglib实现(可以自己用JDK动态代理或者javassist等来实现) 8. **sample** 习惯用spring boot项目来做例子了,简单,方便。 avatar-provider-demo为服务端demo avatar-consumer-demo为服务消费端demo 启动provider和consumer2个项目,在浏览器调用 http://localhost:8089/demo/test 浏览器打印出helloavatar 调用远程服务端,并且将服务端返回输出到浏览器中。 #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)