怎么就想不开了,自己手撸了 RPC 框架 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
pwh19920920
V2EX    分享创造

怎么就想不开了,自己手撸了 RPC 框架

  •  
  •   pwh1992092 2020-05-29 09:49:33 +08:00 4422 次点击
    这是一个创建于 1965 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目真正启动是在 19 年 5 月吧,因为懒,中间停了起码半年,最近又开始拾了起来,撸起袖子接着干,终于在这几天撸出来了,别说了,我又要去养养身子了。。。。

    项目名字 Xmutca-rpc

    项目地址: https://github.com/pwh19920920/xmutca-rpc

    Xmutca-rpc 是一个基于 netty 开发的分布式服务框架,提供稳定高性能的 RPC 远程服务调用功能,支持注册中心,服务治理,负载均衡等特性,开箱即用。

    模块介绍

    • 1.xmutca-rpc-core rpc 核心模块
    • 2.xmutca-rpc-example rpc 示例
    • 3.xmutca-rpc-local 本地容器实现
    • 4.xmutca-rpc-registry-nacos nacos 注册中心
    • 5.xmutca-rpc-spring spring 容器实现

    实现功能

    • 1.核心实现:SPI 扩展,支持动态加载拓展实现,具体可以看实现类 ExtensionLoader
    • 2.负载均衡:现在已支持轮训负载,随机负载,也可自定义
    • 3.集群容错:FailFast 快速失败、FailOver 故障切换,FailSafe 故障安全, FailBack 失败恢复,Broadcast 广播调用
    • 4.注册发现:目前支持接入 nacos
    • 5.容器支持:支持本地 java 容器,支持 spring 容器
    • 6.注解拓展:支持注解加载提供者,注解获取远程 rpc 对象
    • 7.序列方式:支持 fastJson, Kryo, protostuff 序列化,默认走 protostuff 序列化
    • 8.极速拓展:允许加载自定义的过滤器,自定义容器,自定义注册中心等等。

    快速开始

    1. maven 配置 <dependency> <groupId>com.xmutca</groupId> <artifactId>xmutca-rpc-core</artifactId> <version>0.0.1-SNAPSHOT </version> </dependency> <dependency> <groupId>com.xmutca</groupId> <artifactId>xmutca-rpc-spring</artifactId> <version>0.0.1-SNAPSHOT </version> </dependency> <dependency> <groupId>com.xmutca</groupId> <artifactId>xmutca-rpc-registry-nacos</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> 2. 定义接口 public interface HelloService { /** * test * @param msg * @return */ String sayHello(String msg); } 3. 提供者实现接口 @Component @Provider(interfaceClass = HelloService.class) public class HelloServiceImpl implements HelloService { @Autowired private TestService testService; @Override public String sayHello(String msg) { return testService.test() + " -> " + msg; } } 4. 提供者配置 rpc: registry: nacos://localhost:8848 # 注册中心地址 provider: # 提供者配置 corePoolSize: 60 # 核心线程数 maxPoolSize: 300 # 最大线程数 port: 8886 # 提供者端口 scanPackage: com.xmutca.rpc.provider.facade # 扫描提供者包路径 metadata: # 服务元数据 group: "order" # 服务分组 serviceName: "test" # 服务名称 version: "v1.0.0" # 服务版本 5. 启动提供者 @EnableXmutcaRpc @SpringBootApplication public class XmutcaSpringProviderApplication { public static void main(String[] args) { SpringApplication.run(XmutcaSpringProviderApplication.class, args); } } 6. 消费者引用 @RestController @RequestMapping public class ControllerTest { @Reference(serviceName = "test", group = "order", interfaceClass = HelloService.class) private HelloService helloService; @RequestMapping("/test") public Object test() { return helloService.sayHello("test"); } } 7. 消费者配置 rpc: registry: nacos://localhost:8848 consumer: - timeout: 1000 # 超时配置 metadata: group: "order" # 服务分组 serviceName: "test" # 服务名称 version: "v1.0.0" # 服务版本 8. 启动消费者 @EnableXmutcaRpc @SpringBootApplication public class XmutcaSpringConsumerApplication { public static void main(String[] args) { SpringApplication.run(XmutcaSpringConsumerApplication.class, args); } } 

    作者题外话

    此项目欢迎各位 v 友试用,互相学习,如有 bug 及时反馈,谢谢。

    7 条回复    2020-06-01 13:26:53 +08:00
    zzmFina
        1
    zzmFina  
       2020-05-29 17:57:22 +08:00
    居然没人回复
    Cmxxx
        2
    Cmxxx  
       2020-05-29 18:38:15 +08:00
    好厉害
    pomelotea2009
        3
    pomelotea2009  
       2020-05-30 07:46:49 +08:00 via Android
    为楼主的毅力点赞
    labulaka521
        4
    labulaka521  
       2020-05-30 09:57:38 +08:00 via Android
    OctopusGO
        5
    OctopusGO  
       2020-06-01 00:20:32 +08:00 via iPhone
    厉害,学习了
    ala2008
        6
    ala2008  
       2020-06-01 10:03:12 +08:00
    可以写个教程,菜鸟搞不定啊
    pwh19920920
        7
    pwh19920920  
    OP
       2020-06-01 13:26:53 +08:00
    @ala2008 小哥你说的教程是这个 rpc 框架的实现原理吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4543 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 04:05 PVG 12:05 LAX 21:05 JFK 00:05
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86