码农知识堂 - 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

  • 相关阅读:
    python自动化第一篇—— 带图文的execl的自动化合并
    react配置 axios
    论文阅读《PTR: Prompt Tuning with Rules for Text Classification》
    MYSQLg高级-------分库分表之核心Sharding-JDBC
    【Unity】Unity开发进阶(六)UnityEvent使用与源码解析
    818专业课【考经】—《信号系统》之章节概要:第三章 连续时间系统的时域分析
    蓝桥等考Python组别十七级003
    vue:生命周期函数总结
    2022款Thinkphp家政上门预约系统-全开源系统源码
    数据库系统ER模型和关系代数
  • 原文地址: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号