【Spring Cloud】远程调用

目录

  • Spring Cloud Netflix Feign简介
    • 前言
    • Feign是什么
    • OpenFeign组件和Spring Cloud OpenFeign
      • OpenFeign组件
      • Spring Cloud OpenFeign
  • OpenFeign-微服务接口调用
    • 需求说明
    • 1. 启动Eureka Server服务
    • 2.创建两个项目,将其注册到Eureka Server
    • 3.在服务提供者中添加业务处理代码
      • 3.1在demo-user-provider 中添加UserService接口,提供checkuser()方法
      • 3.2在demo-user-provider 中添加UserServiceImpl类,实现接口中的方法
      • 3.3在demo-user-provider 中添加UserController类
      • 3.4启动demo-user-provider,测试是否成功
    • 4.在服务消费者中调用服务提供者的接口
      • 4.1在demo-user-consumer中添加OpenFeign依赖
      • 4.2在demo-user-consumer中创建UserFeignClient 接口
      • 4.3为接口添加@FeignClient注解并指定name属性值
      • 4.4启动类添加注解@EnableFeignClients
      • 4.5在demo-user-consumer中创建LocalUserService接口,定义login()方法,并创建实现类LocalUserServiceImpl。
      • 4.6在demo-user-consumer中创建UserController类。
    • 5.测试是否成功
  • OpenFeign-接口调用传递参数
    • 1.修改提供服务方法
      • 1.1demo-user-provider的checkUser()方法,添加参数
      • 1.2UserController中的请求处理
    • 2.在服务消费者中传递参数
    • 3.修改调用服务方法
    • 小结:OpenFeign-接口调用传递参数

Spring Cloud Netflix Feign简介

前言

  • 一个成熟的微服务解决方案,内部调用必然依赖一个好的RPC框架,比如:基于Http协议的Feign,基于TCP协议的Dubbo。
  • 如果不使用RPC框架,那么调用服务需要走Http的话,配置请求head、body,然后才能发起请求。获得响应体后,还需解析等操作,十分繁琐。

Feign是什么

  • Feign是Spring Cloud组件中一个轻量级RESTful的Http服务客户端,以Java接口注解的方式调用Http请求。
  • Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,封装了Http调用流程。
  • Feign内置了Ribbon,可以与Eureka组合使用以支持负载均衡。用来做客户端负载均衡,去调用服务注册中心的服务。
  • Feign是一个声明式、模板化的HTTP客户端,它让微服务之间的调用变得更简单了。

OpenFeign组件和Spring Cloud OpenFeign

OpenFeign组件

  • 由于 Netflix 公司不再维护Feign组件,Feign组件由社区维护,Feign更名为 OpenFeign,并且项目迁移到新的仓库。

Spring Cloud OpenFeign

  • Spring Cloud OpenFeign是在Spring Cloud Feign组件的基础上进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。
  • Spring Cloud OpenFeign的@FeigenClient注解可以解析SpringMvc的@RequestMapping注解下的接口,通过动态代理的方式产生实现类,在实现类中进行负载均衡的微服务远程调用!
  • 咱们把注册中心中每一个服务都以一个接口的形式体现,我们服务的消费者只需要调用这个接口中的方法,配合Ribbon使用,那么底层就会自动的调用远方的服务。

OpenFeign-微服务接口调用

需求说明

  • 启动两个微服务项目,并将其都注册到需要用户认证的Eureka Server
  • 实现两个微服务间的接口调用(最简单的方法调用,不用传参)。

1. 启动Eureka Server服务

2.创建两个项目,将其注册到Eureka Server

  • 项目一: demo-user-consumer
  • 项目二: demo-user-provider

3.在服务提供者中添加业务处理代码

3.1在demo-user-provider 中添加UserService接口,提供checkuser()方法

public interface UserService {boolean checkUser() throws Exception;
}

3.2在demo-user-provider 中添加UserServiceImpl类,实现接口中的方法

@Service
public class UserServiceImpl implements UserService {@Overridepublic boolean checkUser() throws Exception {return true;}
}

3.3在demo-user-provider 中添加UserController类

@RestController
public class UserController {@Resourceprivate UserService userService;@PostMapping("/provider/checkUser")public boolean checkUser() throws Exception{return userService.checkUser();}
}

3.4启动demo-user-provider,测试是否成功

4.在服务消费者中调用服务提供者的接口

4.1在demo-user-consumer中添加OpenFeign依赖

        <!--OpenFeign组件--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

4.2在demo-user-consumer中创建UserFeignClient 接口

4.3为接口添加@FeignClient注解并指定name属性值

//通过name属性指定访问注册中心的服务提供者的名字
@FeignClient(name = "DEMO-USER-PROVIDER")
public interface UserFeignClient {/*** 远程调用DEMO-USER-PROVIDER中的/provider/checkUser服务* 调用的路径名称必须和服务提供者保证高度一致* @return* @throws Exception*/@PostMapping("/provider/checkUser")boolean checkUser() throws Exception;
}

4.4启动类添加注解@EnableFeignClients

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class DemoUserConsumerApplication {public static void main(String[] args) {SpringApplication.run(DemoUserConsumerApplication.class, args);}}

4.5在demo-user-consumer中创建LocalUserService接口,定义login()方法,并创建实现类LocalUserServiceImpl。

public interface LocalUserService {boolean doLogin() throws Exception;
}
@Service
public class LocalUserServiceImpl implements LocalUserService {@Resourceprivate UserFeignClient userFeignClient;@Overridepublic boolean doLogin() throws Exception {//通过http协议调用的服务return userFeignClient.checkUser();}
}

4.6在demo-user-consumer中创建UserController类。

@RestController
public class UserController {@Resourceprivate LocalUserService localUserService;@PostMapping("/consumer/doLogin")public String doLogin() throws Exception{boolean result=localUserService.doLogin();if(result){return "登录成功";}else {return "登录失败";}}
}

5.测试是否成功

在这里插入图片描述

OpenFeign-接口调用传递参数

1.修改提供服务方法

1.1demo-user-provider的checkUser()方法,添加参数

public interface UserService {boolean checkUser(String phone,String password) throws Exception;
}
@Service
public class UserServiceImpl implements UserService {@Overridepublic boolean checkUser(String phone,String password) throws Exception {return "admin".equals(phone) && "123456".equals(password);}
}

1.2UserController中的请求处理

@RestController
public class UserController {@Resourceprivate UserService userService;@PostMapping("/provider/checkUser")public boolean checkUser(String phone,String password) throws Exception{return userService.checkUser(phone,password);}
}

2.在服务消费者中传递参数

修改上个示例中demo-user-consumer的UserFeignClient 接口,和提供服务方法保持一致

//通过name属性指定访问注册中心的服务提供者的名字
@FeignClient(name = "DEMO-USER-PROVIDER")
public interface UserFeignClient {/*** 远程调用DEMO-USER-PROVIDER中的/provider/checkUser服务* 调用的路径名称必须和服务提供者保证高度一致* @return* @throws Exception*/@PostMapping("/provider/checkUser")boolean checkUser(@RequestParam String phone,@RequestParam String password) throws Exception;
}

3.修改调用服务方法

修改上个示例中demo-user-consumer的login()方法,调用服务时传入参数

public interface LocalUserService {boolean doLogin(String phone,String password) throws Exception;
}
@Service
public class LocalUserServiceImpl implements LocalUserService {@Resourceprivate UserFeignClient userFeignClient;@Overridepublic boolean doLogin(String phone,String password) throws Exception {//通过http协议调用的服务return userFeignClient.checkUser(phone,password);}
}
@RestController
public class UserController {@Resourceprivate LocalUserService localUserService;@PostMapping("/consumer/doLogin")public String doLogin(String phone,String password) throws Exception{boolean result=localUserService.doLogin(phone,password);if(result){return "登录成功";}else {return "登录失败";}}
}

小结:OpenFeign-接口调用传递参数

  • 单个参数:添加@RequestParam

  • 多个参数:添加@RequestParam

  • Map参数:添加@RequestBody

  • 自定义对象参数:添加@RequestBody

  • 自定义对象参数可以将需要传递的对象抽离到公共组件中

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

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

相关文章

【UE Websocket】“WebSocket Server”插件使用记录

1. 在商城中下载“WebSocket Server”插件 该插件具有如下节点&#xff0c;基本可以满足WebSocket服务端的所有需求 2. 如果想创建一个基本的服务端&#xff0c;我们可以新建一个actor蓝图&#xff0c;添加如下节点 3. UE运行后&#xff0c;我们可以使用在线的websocket测试助手…

RuntimeError: CUDA out of memory. Tried to allocate 1.77 GiB?如何解决

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

开源与闭源AI模型的对决:数据隐私、商业应用与社区参与

引言 在人工智能&#xff08;AI&#xff09;领域&#xff0c;模型的发展路径主要分为“开源”和“闭源”两条。这两种模型在数据隐私保护、商业应用以及社区参与与合作方面各有优劣&#xff0c;是创业公司、技术巨头和开发者们必须仔细权衡的重要选择。那么&#xff0c;面对这些…

6、python开发环境-PyCharm

下载完成之后双击进行安装 找到安装好的解释器程序

ZeroTier+Nomachine远程

目录 前述&#xff1a;一、Zero二、Nomachine 前述&#xff1a; 需要远程控制时&#xff0c;服务端与客户端都必须下载这两个软件&#xff01;远程主机&#xff08;被控制的主机&#xff09;和远程客户端&#xff08;控制主机的用户&#xff09;都必须具有网络连接&#xff0c;…

11.Redis之zset类型

1.zset类型基本介绍 有序描述的是&#xff1a;升序/降序 Set 集合 1.唯一 2. 无序 孙行者,行者孙, 者行孙 >同一只猴~~ List有序的 孙行者,行者孙, 者行孙 >不同的猴~~ zset 中的 member 仍然要求是唯一的!!(score 则可以重复) 排序的规则是啥? 给 zset 中的 member 同…

快速排序算法备考

快排模板 快速排序(快排) (C语言实现)_c语言快速排序_Brant_zero2022的博客-CSDN博客 快排使用递归来实现 关键思想:划分 //划分 int partion(int A[],int L,int R){int midA[L];while(L<R){//每一次划分:左边元素<枢轴元素<右边元素//R往前找&#xff0c;直到找到一…

SQL 语言:基本概述和数据定义

文章目录 1. 数据库语言2. SQL 概述2.1 SQL 的特点2.2 SQL 语言支持三级模式结构2.3 SQL 的基本组成 3. 数据定义3.1 数据类型3.2 创建表3.3 修改和删除表3.4 创建和删除索引3.5 创建和删除视图 1. 数据库语言 数据结构化语言 (Structured Query Language&#xff0c;SQL)&…

【机器学习】——线性模型

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

面试被问到不懂的东西,是直接说不懂还是坚持狡辩一下?

大家好&#xff0c;我是瑶琴呀。 面试被问到不懂的东西&#xff0c;是直接说不懂还是坚持狡辩一下&#xff1f;这个问题可以转变一下&#xff0c;如果你顺利拿到 offer&#xff0c;公司安排的工作跟你之前的技术和经验不匹配&#xff0c;你还愿意干下去吗&#xff1f; 转变一…

太速科技-FMC125-两路125Msps AD,两路160Msps DA FMC子卡

FMC125-两路125Msps AD&#xff0c;两路160Msps DA FMC子卡 一、板卡概述 板卡可实现2路14bit 125Msps AD 和2路16bit 160MspsDA功能&#xff0c;FMC LPC连接器用于扩展到xilinx用于模拟信号、中频信号采集&#xff0c;信号发出等应用。 二、性能指标 板卡功能 参…

幻影成像制作中,哪些技术细节不可忽视?

在当今多媒体展厅设计的潮流中&#xff0c;幻影成像技术以其立体的数字影像和卓越的视觉效果&#xff0c;脱颖而出&#xff0c;成为备受瞩目的焦点。它不仅吸引了众多参观者的目光&#xff0c;更在社交媒体上掀起了热烈的讨论。然而&#xff0c;要想在多媒体展厅中精心打造一场…

2024可信赖的企业级生成式 AI 白皮书

来源&#xff1a;COPU&IBM&#xff1a; 近期历史回顾&#xff1a;

k8s devops实战教程+生产实践+可就业

k8s devops实战教程 简介教程涉及到内容教程获取学习教程后的收货助学群 简介 越来越多的企业应用云原生化&#xff0c;催生很多应用的部署方式也发生了很多变化。 从物理机部署应用过度到虚机部署应用再到应用容器化&#xff0c;从单应用再到服务拆分为微服务&#xff0c;靠人…

是他将计算机从“一屋子”变成“一柜子”——量子前哨缅怀小型机之父 戈登·贝尔

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;6000字丨15分钟阅读 5 月 21 日&#xff0c; 美国贝尔实验室资深人士 John Mashey 发布消息称&#xff0c;计算机先驱戈登贝尔&#xff08;Gordon…

机器人系统ros2-开发学习实践15-模拟用 URDF 建模 步行机器人行走示例

目标&#xff1a; 本教程将向您展示如何建模行走机器人、将状态发布为tf2消息并在 Rviz 中查看模拟。首先&#xff0c;我们创建描述机器人组件的 URDF 模型。接下来&#xff0c;我们编写一个节点来模拟运动并发布 JointState 和变换。然后我们使用robot_state_publisher将整个…

spring cloud alibaba sentinel 配置过程 流控 降级热点 授权

目录 1.基础理论 2.配置 3.加入依赖和配置文件 4.流控 1.基础理论 Sentinel是阿里开源的项目&#xff0c;提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。 丰富的应用场景 &#xff1a;Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心…

未授权访问:Jupyter Notebook 未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 4、利用terminal命令执行 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c;还有其他大佬总结好的文章…

cpolar内网穿透工具—无需部署,远程访问网址

文章目录 cpolar介绍安装教程隧道管理VIP客户cpolar介绍 cpolar是一种安全的内网穿透服务,它将局域网下面的本地服务器通过加密隧道暴露至公网,使得公网用户可以正常访问内网服务。 只需一行命令,就可以将内网站点发布至公网,方便给客户演示。高效调试微信公众号、小程序…