码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 手写RPC框架-项目结构以及使用


    手写RPC框架-项目结构以及使用

    • 项目结构
    • 项目架构
    • RPC的使用
      • 第一步 搭建两个Spring boot的项目
      • 第二步 引入依赖(消费者和提供者通用)
      • 第三步 简单配置(消费者和提供者通用)
      • 消费者代码编写
        • 项目结构
        • 调用远程服务接口
        • Controller入口
      • 服务提供者代码编写
        • 项目结构
        • 入口编写(Controller)
    • 运行查看效果
    • 项目地址

    项目结构

    在这里插入图片描述

    项目架构

    在这里插入图片描述

    RPC的使用

    RPC是基于Spring boot的自动装配所实现的,使用的时候主要是基于几个注解 和简单配置,也达到了开箱即用的效果。

    第一步 搭建两个Spring boot的项目

    第二步 引入依赖(消费者和提供者通用)

    <dependency>
        <groupId>org.wb.rpcgroupId>
        <artifactId>wbrpc-spring-boot-autoconfigureartifactId>
        <version>1.0-SNAPSHOTversion>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    第三步 简单配置(消费者和提供者通用)

    wb:
      # 是否启用
      enabled: true
      # 要扫描的包
      packageScan: com.wb.test
      # 服务名称,消费端消费通过注解指定的服务名
      name: consumer
      # 注册中心使用什么
      register-type: redis
      # redis的配置信息
      redis-register:
        host: 114.215.197.96
        port: 6379
        password: xuwenbin123.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    消费者代码编写

    项目结构

    在这里插入图片描述

    调用远程服务接口

    主要注解:

    1. @WbClient
      只有一个参数就是要调用的服务名称
    2. @WbRequestMapping
      把参数和对应请求的请求参数相对应,如果在打包的时候配置-parameters,注解可以省略,同名配对。
    3. @WbRequestBody
      把某个参数放到请求体中
    @WbClient("provider")
    public interface TestService {
    
        @WbRequestMapping(value = "/test", method = WbRequestMethod.GET)
        void test(@WbRequestParam(value = "asd") String str, String str2);
    
        @WbRequestMapping(value = "/testbody", method = WbRequestMethod.POST)
        TestUser testpost(@WbRequestBody TestUser testUser);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    Controller入口

    @RestController
    public class TestController {
    
    	// 注入后直接调用即可
        @Autowired
        private TestService testService;
    
        @GetMapping("test")
        public String test(String str, String str2){
            testService.test(str, str2);
            return null;
        }
    
        @PostMapping("testpost")
        public TestUser testPost(){
            TestUser testUser = new TestUser();
            testUser.setName("asd");
            return testService.testpost(testUser);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    服务提供者代码编写

    项目结构

    在这里插入图片描述

    入口编写(Controller)

    @RestController
    public class TestController {
    
        @GetMapping("test")
        public void hello(String asd, String str2) {
            System.out.println(asd);
        }
    
        @PostMapping("testbody")
        public TestUser hello(@RequestBody TestUser user) {
            return user;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    如果只是单纯的服务提供者 不做消费端,到这里配置完毕,没有一点代码侵入性。

    运行查看效果

    访问:http://127.0.0.1:8882/test?str=asd111
    提供者输出:
    在这里插入图片描述

    项目地址

    https://gitee.com/xu–wenbin/wb-spring-boot-project

  • 相关阅读:
    金九银十!Java基础常见知识点&面试题总结(二),2022最新版!
    SpringBoot电商项目之购物车下单(沙箱支付)
    gdb工具使用方法和常用指令介绍
    SpringCloud-01 Rest学习环境搭建笔记
    java-php-python-ssm点餐系统设计计算机毕业设计
    第一次参加算法比赛是什么感受?
    btree,hash,fulltext,Rtree索引类型区别及使用场景
    【云原生】都在说云原生?到底什么是云原生?
    07.docker容器的网络访问
    个人博客类网站为什么更适合虚拟主机?
  • 原文地址:https://blog.csdn.net/weixin_42060779/article/details/126835634
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号