写个rpc调用,试试自己了解多少

news2024/10/5 18:23:56

什么是rpc

rpc即是远程过程调用,简单来说就是调用其他服务的接口像调用自己的本地方法一样,通常我们的调用的时候不需要关心调用过程和底层的通信即可实现调用其他的服务;

大概流程就是服务模块双方都会向注册中心注册自己的服务,然后work1客户端会通过代理proxy调用服务端,具体调用哪个服务,这里就是注册中心的用处了,work2接收到请求处理然后返回,

为什么要用rpc

随着我们服务的模块化,不可避免的会存在各个服务之间的调用问题,那么服务之间无感、方便快捷、并且还可以进行一些特殊的设定那当然最好,于是乎rpc出现了;

写个RPC–版本选择

本篇着重的技术点是nacos+openfeign实现rpc调用(基于HTTP),本文不会很复杂的,只是个大概,后续可能会写上基于Dubbo的实现(基于TCP),以及序列化可能存在的问题(数据在传输过程需要序列化以及反序列化,这其中数据可能会丢失);

写rpcDemo的时候一定要注意引入包的版本号,不然就会一直报错,我用的是Spring Cloud Alibaba 2021.1的版本,自然我的springboot版本就要是2.4.2;网页下面还有组件的关系,大家可以自行看下,这个demo没用到;

在我们为父pom指定版本号的时候要为其加上dependencyManagement标签,看下子模块pom是否声明了父模块,即parent标签;这样我们的子模块就可以依赖继承父模块版本号了;详细的可以看提交的代码;

写个RPC–代码开发

下面我们正式开发,首先我们需要建立一个api包(我这里是测试用例所以用common包代替),该模块我们只需要定义需要的接口,看用例:

@FeignClient(name = "应用名")
@RequestMapping("/getUser")
public interface UserInfoService {
    @GetMapping("/getMess")
    String UserMess(@RequestParam("name") String name);
}
复制代码

此处类上面的接口地址你可以直接和方法上的地址拼接在一起或者分开,都可,但是必须加上

@FeignClient注解,有了该注解表示这个接口可以实现远程调用,其中里面的参数表示服务提供者的名称,即applicationName

接着我们要创建三个模块,一个当客户端发送请求,两个当服务端处理请求,

先说客户端

首先我们客户端由于引入了新的模块,所以我们需要让我们的feign接口能被spring扫描到,启动类添加上这两个注解,@EnableDiscoveryClient表示该客户端可被发现,默认为true,表示服务自动注册;

@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com",defaultConfiguration = OpFeignConfig.class)
复制代码

接着我们在controller中调用这个service接口即可,呃呃呃,就是这么简单吧(先实现功能)

@RestController
@RequestMapping("/getUser")
public class UserInfoController {
    @Autowired
    private UserInfoService userInfoService;
    @GetMapping("/getMessd")
    public String getUserMessd(@RequestParam("name") String name){
        String tName = userInfoService.UserMess(name);
        return tName;
    }
}
复制代码

再说服务端

服务端就更简单啦,我们这里只拿一个出来说下,由于我们是被调用方,我们只需要该服务可被注册发现即可,所以启动类只需要加上@EnableDiscoveryClient;这里面就不需要调用api对应的service接口了,我们直接将我们的controller层接口与我们的service层接口对应上即可,届时我们的客户端会根据service上的接口去找服务端对应的接口;看用例:

@RestController
@RequestMapping("/getUser")
public class UserInfoController {
    @GetMapping("/getMess")
    public String getUserMess(@RequestParam("name") String name){
        System.out.println(name);
        return "我的名字是8008:"+name;
    }
}
复制代码

额,简单实现功能就是这么简单;

接着我们看下bootstrap.yaml;此处我只配了集群所需要的服务名及group;

spring:
  application:
    name: 服务名(与feignclient的name对应)
  cloud:
    nacos:
      discovery:
        server-addr: xxx:8848 #Nacos地址
        group: my-test
      config:
        server-addr: xxx:8848 #Nacos地址
        file-extension: yaml #这里我们获取的yaml格式的配置
复制代码

application.yaml加上下面这个,

feign:
  httpclient:
    enabled: true
    max-connections: 100
复制代码

可以不配置,默认就是true,具体在源码有体现

至于启动我这里就不过多展示了,有需要可以自行下载demo了解,最终nacos可以看到这样的情况;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/37612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开发工具vim

一、开发工具vim vim的安装:yum install -y vim 指令:vim --version可以查看当前的版本信息,没有弹出信息就是没有安装。 装的vim是没有相关配置文件的,配置文件需要后面自己装。 之前说过,vs2019是集成软件编译…

【畅购商城】购物车模块之修改购物车以及结算

目录 购物车操作:修改 分析 接口 后端实现:更新 前端实现:修改 前端实现:全选 后端实现:删除数据 结算 跳转页面 购物车操作:修改 分析 接口 PUT http://localhost:10010/cart-service/carts 后…

python数学基础——单词统计

这个练习使用的是英文的单词统计,使用split通过单词中间的空格来做区分,在遍历的过程中通过对【字典】类型进行【字典推导式】的处理来计算每个单词出现的频次。但是由于过程中我们通过re的正则表达式来替换掉了很多的符号,并没有替换成空&am…

【网页设计】web前端期末大作业html+css

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

Day12--自定义组件-渲染my-search组件的基本结构

1.自定义搜索组件 我的操作: 1》在uni_modules中右键新建uni_modules插件: 2》看看效果图: ************************************************************************************************************** 2.在分类页面的 UI 结构中&…

工作中常用的设计模式--策略模式

一般做业务开发,不太容易有大量使用设计模式的场景。这里总结一下在业务开发中使用较为频繁的设计模式。当然语言为Java,基于Spring框架。 1 策略模式(Strategy Pattern) 一个类的行为或方法,在运行时可以根据条件的不同,有不同的…

verilog练习——基础语法

目录 基础语法 VL1 四选一多路器 VL2 异步复位的串联T触发器 VL3 奇偶校验 VL4 移位运算与乘法 VL5 位拆分与运算 VL6 多功能数据处理器 VL7 求两个数的差值 VL8 使用generate…for语句简化代码 VL9 使用子模块实现三输入数的大小比较 VL10 使用函数实现数据大小端转…

数据结构题目收录(二十五)

1、排序趟数与序列的原始状态无关的排序方法是()。 Ⅰ、直接插入排序 Ⅱ、简单选择排序 Ⅲ、冒泡排序 Ⅳ、基数排序 A:Ⅰ、ⅢB:Ⅰ、Ⅱ、ⅣC:Ⅰ、Ⅱ、ⅢD:Ⅰ、Ⅳ 解析 交换类的排序,其趟数和…

GUI编程--PyQt5--QDiaglog

文章目录QDialogQFontDialogQColorDialogQFileDialogQInputDialogQDialog 对话框基类,继承QWidget;用于短期任务,分为模态、非模态 模态,阻塞在当前窗口;分为应用程序级别&窗口级别(仅阻塞关联的窗口&…

关于使用鼠标时间mouseMove拖拽元素及元素抖动的解决方案

最近在做一个画布相关的项目时有一个场景是移动画布,最先开始想到的是拖拽事件,但是用户希望元素是实时的变化,所以决定使用mouseMove事件来做。 思路 通过mouseDown事件确定鼠标按下的位置根据mouseMove事件来计算出鼠标相对初始状态的横向…

MySQL锁杂谈

【说明】 1.MySQL版本5.7.37 2.事务隔离级别 REPEATABLE-READ 3.表结构 Create Table: CREATE TABLE isolation_innodb (id bigint(20) NOT NULL AUTO_INCREMENT,name varchar(10) DEFAULT NULL,money int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT4…

jsp库存管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 库存管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开 发,数据库为Mysql,使用ja…

VMware Cloud Director数据库操作

VMware Cloud Director 是一个云服务平台,以自助服务模式提供安全、隔离、弹性的虚拟数据中心计算、网络、存储和安全。在NFV整个架构中属于VIM层,与NFVI层(对VMware来说即vSphere虚拟化环境)对接获取虚拟化资源并提供给租户。 NF…

服务访问质量(QoS)——QoS技术概述与配置

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.QoS技术概述 1.QoS的应用需求 ①网络拥塞的影响&#xff1a…

【Linux】项目自动化构建工具:make/Makefile的使用

文章目录一、背景1、make和makefile是什么?2、为什么要使用make和makefile?二、原理1、使用make和makefile2、依赖关系和依赖方法3、具体原理4、项目清理一、背景 1、make和makefile是什么? make是一个命令,是一个解释makefile中指令的命令…

Linux项目:自主web服务器

文章目录项目描述Web与 http 发展史DNSURI URL URNHTTP 概述项目纲要项目架构套接字的封装HTTP服务启动日志信息与工具类请求、响应类读取请求读取请求行读取请求报头分析请求行分析请求报头读取正文构建响应预处理返回静态网页CGI机制CGI机制的基本概念CGI函数的实现子CGI程序…

【点云处理】点云法向量估计及其加速(4)

上篇文章【点云处理】点云法向量估计及其加速(3)介绍了如何使用pcl提供的gpu版本法向量计算接口对点云发向量计算进行加速。不足之处在于点云k近邻查找依然比较耗时,成为影响整体计算性能的瓶颈。这篇文章就如何优化点云K近邻查找效率进行实验。上一篇文章的示例代码…

redis数据库的下载安装/免安装版

文章目录下载方式一下载方式二免安装版redis是一款高性能的NOSQL系列的非关系型数据库这里分享三个下载源,只介绍免安装版下载方式一 官网下下载https://redis.io(国外网站下载速度比较慢) 下载方式二 Redis中文网http://www.redis.net.cn…

想你所想,华为云桌面Workspace助你轻松办公

想你所想,华为云桌面Workspace助你轻松办公 双11作为近年来最受关注的购物季,从最开始的电商,到现在各行各业纷纷下场推出活动,期望在此段时间内迅速积累用户,从而提升产品知名度和用户基础。华为云也不例外&#xff0…

学生个人博客网页设计作品 学生个人网页模板 个人网页制作 HTML学生个人网站作业设计

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…