码农知识堂 - 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】NIO相关
    java基于springboot校园餐厅订餐管理系统附源码
    Day656.数据传输加密问题 -Java业务开发常见错误
    机器学习实训(1)——概览(补充)
    详解设计模式:状态模式
    Python将.arff文件转换为.mat文件
    Android studio中如何下载sdk
    Windows11安装MySQL8.1
    Kafka系列之:详细介绍部署Kafka Connect分布式集群
    C++中->与.的区别
  • 原文地址:https://blog.csdn.net/weixin_42060779/article/details/126835634
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号