SpringCloud连载(五):Feign轻松实现Rest接口调用(附视频)
作者:铲除飞网败类 | 来源:互联网 | 2023-08-09 06:53
调用RestAPI通常需要创建一个RestTemplete对象然后传入服务地址.使用postgetdelete等不同的请求,操作起来特别麻烦,Feign可以让我们调用RestAPI
上期我们讲了SpringCloud中Ribbon负载均衡.学会了现实中一个非常实用的技能.有兴趣的同学可以看一下.
SpringCloud 连载(四) : Ribbon负载均衡与自定义算法
Feign主要用于客户端调用WebService接口,让调用接口变的像调用对象的方法一样简单。
比如:
创建一个公共的common组件,在里面写一个接口,声明几个方法,然后让服务端去实现这个接口,同时把这个接口打成的jar丢给客户端的工程师调用,工程师通过Spring Autowired去把这个对象取出来,就可以直接调用服务端实现的方法,有点像gRpc技术.
通过SpringCoud的封装使其支持springMVC注解与
HttpMessageConerters,他可以与Eureka和Ribbon配合使用以支持负载均衡.
通俗的说:
Fegin是一个声明式的Web服务客户端,使得开发web客户端变的更加简单.
使用:只需要创建一个接口,然后在上面添加注解就可以了。
以往使用调用Rest Api:
之前我们使用Ribbon+RestTemlate对Http进行请求封装访问,我们需要写入服务的地址等信息,实际开发中会有很多微服务接口,我们就得定义好多微服务的地址.Fegin在这些的基础上做了一些优化,使得我们在使用的时候,像声明一个 Service一样直接调用接口的方法.
第一步:新创建一个模块;
名称:msc-consumer-department-80-feign
内容与msc-consumer-department-80相同;
pom档加入fegin的GAV配置;
1
2<dependency>
3 <groupId>org.springframework.cloudgroupId>
4 <artifactId>spring-cloud-starter-feignartifactId>
5dependency>
6
第二步:在msc-api的pom.xml中加入对feign的支持
因为有可能其他模块也要调用,所以我们把这个类放在一个公共的模块中.
在msc-api的pom.xml中加入对feign的支持
1
2<dependency>
3 <groupId>org.springframework.cloudgroupId>
4 <artifactId>spring-cloud-starter-feignartifactId>
5dependency>
6
注意:
1:里面的方法和Server端Controller里面方法相同.(可不同)
2:每个方法的RequestMapping一定要与Server端Controller里面的注解相同(路径保持一致)
3:添加注解@FeignClient(value = "MSC-DEPARTMENT")参数就是Eureka中注册部门Server的实例名称
** 这个类可以看作是Server端Controller类的一个接口。
1package com.xiaobaibi.webservice;
2
3import com.xiaobaibi.bean.Department;
4import org.springframework.cloud.netflix.feign.FeignClient;
5import org.springframework.web.bind.annotation.PathVariable;
6import org.springframework.web.bind.annotation.*;
7
8import java.util.List;
9
10// 开启Feign,并告诉服务我指向的是Eureka中的哪个微服务
11@FeignClient(value = "MSC-DEPARTMENT")
12public interface DeparmentWebService {
13
14 /**
15 * 新增部门
16 * @param department
17 * @return
18 */
19 @PostMapping(value = "/department/insert")
20 public boolean insertDept(Department department);
21 /**
22 * 根据 ID 查询
23 * @return
24 */
25 @GetMapping(value = "/department/get/{dId}")
26 public Department getDepartmentById(@PathVariable("dId") Long dId);
27
28 /**
29 * 全查
30 * @return
31 */
32 @GetMapping(value = "/department/list")
33 public List list();
34}
第五步:在客户端的主启动类中加入注解,参数传入第四步接口的包名;
1@EnableFeignClients(basePackages = {"com.xiaobaibi.webservice"})
该注解用于让Spring将这个类注入到容器中.
注意:这个一定要在客户端,就是启用Rest API的模块;
1package com.xiaobaibi.consumer;
2
3import org.springframework.boot.SpringApplication;
4import org.springframework.boot.autoconfigure.SpringBootApplication;
5import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
6import org.springframework.cloud.netflix.feign.EnableFeignClients;
7
8@SpringBootApplication
9@EnableEurekaClient
10// 对部门微服务加负载均衡自定义算法
11@EnableFeignClients(basePackages = {"com.xiaobaibi.webservice"})
12public class MscConsumerApplication_Feign {
13
14 public static void main(String[] args) {
15 SpringApplication.run(MscConsumerApplication_Feign.class,args);
16 }
17}
之前我们是通过RestTemplete输入Rest地址,现在我们把第四步创建的接口当做一个Service直接声明调用就可以了,同其他的Service一样直接Autowired即可。
1/**
2 * Feign方式的 Service
3 */
4@Autowired
5private DeparmentWebService deparmentWebService;
1@RestController
2@RequestMapping(value = "/consumer")
3public class DepartConsumerController {
4 /**
5 * Feign方式的 Service
6 */
7 @Autowired
8 private DeparmentWebService deparmentWebService;
9
10 /**
11 * 新增部门
12 * @param department
13 * @return
14 */
15 @RequestMapping(value = "/insert")
16 public boolean insertDept(Department department){
17 return deparmentWebService.insertDept(department);
18 }
19 /**
20 * 根据 ID 查询
21 * @return
22 */
23 @RequestMapping(value = "/get/{dId}")
24 public Department getDepartmentById(@PathVariable("dId") Long dId){
25 return deparmentWebService.getDepartmentById(dId);
26 }
27
28 /**
29 * 全查
30 * @return
31 */
32 @RequestMapping(value = "/list")
33 public List list(){
34 return deparmentWebService.list();
35 }
36}
如此即可,我们相当于创建一个接口,这个接口可以看作是Server端Controller的接口,之后加入Feign的注解后,在调用的地方直接创建一个service进行调用,非常的方便,另外,该技术自带Ribbon负载均衡功能(默认轮洵)
公众号回复
[ scdemo] : 本期Demo程式;
[ 2021] : SpringCloud视频地址.
[sbsw] :小编所用的JDK,Maven,IDEA.
[mysql] 或 [mysql.exe]获取mysql的安装包与安装教程.
原创不易,点个赞分享出去吧.感谢支持.
![](https://img6.php1.cn/3cdc5/98a6/cd5/edefccff87e139d5.jpeg)
推荐阅读
-
本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ...
[详细]
蜡笔小新 2023-12-10 21:42:37
-
本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ...
[详细]
蜡笔小新 2023-12-14 10:11:46
-
-
1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ...
[详细]
蜡笔小新 2023-10-17 19:08:29
-
Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序 上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ...
[详细]
蜡笔小新 2023-10-17 16:11:18
-
在这分布式系统架构盛行的时代,很多互联网大佬公司开源出自己的分布式RPC系统框架,例如:阿里的dubbo,谷歌的gRPC,apache的Thrift。而在我们公司一直都在推荐使用d ...
[详细]
蜡笔小新 2023-10-12 18:20:25
-
当下,分布式系统正变得越来越重要,大型网站几乎都是分布式的。分布式系统的最大难点,就是各个节点的状态 ...
[详细]
蜡笔小新 2023-10-12 09:55:53
-
kubelet主要功能Pod管理在kubernetes的设计中,最基本的管理单位是pod,而不是container。pod是kubernetes在容器上的一层封装,由一组运行在同一 ...
[详细]
蜡笔小新 2023-10-11 23:42:47
-
原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ...
[详细]
蜡笔小新 2023-12-14 12:39:13
-
本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ...
[详细]
蜡笔小新 2023-12-12 12:37:07
-
本文介绍了如何实现ScrollView嵌套Collectionview无痕衔接四向滚动,并支持自定义TitleView。通过使用MainScrollView作为最底层,headView作为上部分,TitleView作为中间部分,Collectionview作为下面部分,实现了滚动效果。同时还介绍了使用runtime拦截_notifyDidScroll方法来实现滚动代理的方法。具体实现代码可以在github地址中找到。 ...
[详细]
蜡笔小新 2023-12-12 11:38:19
-
PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ...
[详细]
蜡笔小新 2023-12-12 10:25:39
-
本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ...
[详细]
蜡笔小新 2023-12-11 18:32:44
-
微信公众号:内核小王子关注可了解更多关于数据库,JVM内核相关的知识;如果你有任何疑问也可以加我pigpdong[^1]jvm一行代码是怎么运行的首先,java代码会被编译成字 ...
[详细]
蜡笔小新 2023-10-16 19:56:17
-
一、单体架构存在的问题缺点:1、难以维护:当单体应用业务不断迭代后代码量非常臃肿,模整个项目非常复杂,每次更改代码都可能带来新的bug;2、部署项目麻烦:庞大之后项目部署效率 ...
[详细]
蜡笔小新 2023-10-13 11:09:22
-
篇首语:本文由编程笔记#小编为大家整理,主要介绍了阿里云监控URL的配置笔记相关的知识,希望对你有一定的参考价值。有很多细节需要记录 ...
[详细]
蜡笔小新 2023-10-12 18:12:55
-