SpringCloud(三)- OpenFeign简介及@FeignClient等注解的使用
唯能极于情,故能极于剑
有问题或错误请及时联系小编或关注小编公众号 "CodeCow",小编一定及时回复和改正,期待和大家一起学习交流
此文由四部分组成(OpenFeign简介、@FeignClient 使用、实操、总结),别着急,慢慢来
一、OpenFeign
1.1、OpenFeign 啥玩意 ?:
- 官网:Feign 是一个声明式的Web服务客户端,让编写Web服务客户端变得非常容易,只需 创建一个接口并在接口上添加注解 即可
1.2、OpenFeign 能干嘛 ? :
小编就不多 BB 先来张图 压压惊

这图不难理解:客服端调用服务端有两种方式 ribbon + restTemplate 或 Openfeign;
但是:在我们实际开发当中,往往 一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客服端类来包装这些依赖服务的调用 ;所以,OpenFeign在此基础上做了进一步封装,由他来帮助我们实现依赖服务接口的定义。
因此:需要我们做的非常简单,我们只需要创建一个接口并使用注解的方式来配置他,即可完成对服务提供方的接口绑定。
1.3、OpenFeign 怎么玩 ? :
来两个 好男人 必备网站, 哈哈
官网:cloud.spring.io/spring-cloud-static/Hoxton.SR1/reference/htmlsingle/#spring-cloud-openfeign( 贼 慢。。。。)
GitHub:https://github.com/spring-cloud/spring-cloud-openfeign (还好,一般般)

二、OpenFeign 实操
了解OpenFeign 了,不来点 硬核 咋行呢,下面小编就结合实际开发和大家聊聊
注意:有服务端和客户端两个模块/项目
2.1、 :服务端 操作
①、首先导包
<!--监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> <!--Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!--服务注册与发现 consul-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
②、改 YML 配置文件
server:
port: 8006 //端口号 spring:
application:
name: cloud-payment-service //服务名
cloud:
consul:
host: localhost //consul的IP
port: 8500 //consul启动端口默认8500
discovery:
service-name: ${spring.application.name}
prefer-ip-address: true //不写这个配置,在docker下的consul里面健康检查会失败
healthCheckInterval: 5s //健康检查频率
port: ${server.port} //注册服务所在端口
③、添加主启动类
@SpringBootApplication // springboot 注解
@EnableDiscoveryClient //作用:能够让注册中心发现,并扫描到该服务
public class ProvideMain8006 { public static void main(String[] args) {
SpringApplication.run(ProvideMain8006.class, args);
}
}
④、业务逻辑Controller
@RestController
@Slf4j
public class PaymentController { @Resource
private PaymentService paymentService; @GetMapping("/payment/get/{id}")
public RespResult<Payment> getPaymentById(@PathVariable("id") Integer id) {
Payment payment = paymentService.getById(id); //getById 是serviceImpl中根据id 获取 payment 实体的方法, 小编在这就不赘述了
log.info("查询结果为:" + payment);
if (payment != null) {
return RespResult.success(payment); // RespResult 是小编自己封装的返回结果,不懂可以问小编
} else {
return new RespResult<>(444, "查询为空");
}
}
} 服务端就完事了:
自测:
url : http://localhost:8006/payment/get/1
结果 :{"code":200,"message":"成功","data":{"id":1,"desc":"98K"}}
解释 :Payment 实体就两个字段 id、desc, 通过结果可以知道 RespResult 是啥了吧 经过 小编一顿 SAO 操作, 服务端 还可以吧 ^ _ ^
2.1、 :客服端 / 消费端 操作
注意:消费端大体和客服端一样,注意细节 O ^ _ ^
①、首先导包
<!--监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> <!--Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!--服务注册与发现 consul-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency> <!--服务调用 openFeign--> // 朋友:包其实就比服务端多一个 openFeign
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
②、改 YML 配置文件
server:
port: 80 //端口号 浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入“: 80”了 spring:
application:
name: cloud-order-service //服务名
cloud:
consul:
host: localhost //consul的IP
port: 8500 //consul启动端口默认8500
discovery:
service-name: ${spring.application.name}
prefer-ip-address: true //不写这个配置,在docker下的consul里面健康检查会失败
healthCheckInterval: 5s //健康检查频率
port: ${server.port} //注册服务所在端口 ribbon: // 此配置和 OpenFeign 超时控制 有关, 小编在这就不多赘述了,有想了解,直接给小编留言
ReadTimeout: 5000 //请求处理的超时时间 5秒
ConnectTimeout: 3000 //请求连接的超时时间 3秒 logging: // 此配置和 OpenFeign 打印日志级别有关
level:
top.msxdlb.springcloud.service.OrderService: debug //日志打印级别
③、添加主启动类
@SpringBootApplication // springboot 注解
@EnableDiscoveryClient //作用:能够让注册中心发现,并扫描到该服务
@EnableFeignClients //服务调用 注解
public class ConsumerMain80 { public static void main(String[] args) {
SpringApplication.run(ConsumerMain80.class);
}
}
④、业务逻辑 Service
/**
* 此类作用: 不懂看 最上面 OpenFeign 是啥玩意?
* OpenFeign 能干嘛?
*/
@Component
@FeignClient("cloud-payment-service") //里面是服务端的 服务名(yml 文件中)
public interface PaymentService{ @GetMapping("/payment/get/{id}")
public RespResult<Payment> getPaymentById(@PathVariable("id") Integer id);
④、业务逻辑 Controller
@RestController
@Slf4j
public class PaymentController {
/**
* 使用 Feign 方式调用
*/
@Resource
private PaymentService paymentService; // 注入 service 中 通过 @FeignClient 定义好的接口 @GetMapping("/feign/payment/get/{id}")
public RespResult<Payment> getPayment(@PathVariable("id") Integer id) {
log.info("<<<<<<<<<<< 我是通过feign >>>>>>>>>>>>");
return paymentService.getPaymentById(id);
}
} 消费端也完事了:
总测试步骤:
1、启动服务端
2、启动消费端
3、地址栏输入url: http://localhost/feign/payment/get/1 // 为什么不加端口号(回去看 消费端 Yml 配置 有说明)
4、结果:
如果结果为:{"code":200,"message":"成功","data":{"id":1,"desc":"98K"}}
就是和服务端自测结果一样,恭喜你 成功了 如果你 有幸看到这里:
咋青山不改,绿水长流,不妨看看小编其他作品,很香哟, 呵呵
第二步OpenFeign 实操总结: 其实就两点:
①、在消费端启动类加:@EnableFeignClients 注解
②、在业务逻辑 Service 接口加: @FeignClient 注解 即可
三、总结
这是 SpringCloud 的 OpenFeign 篇,后续小编会从 “Hystrix、Gateway …” 等坚持以博客的方式来分享自己对SpringCloud 的理解,并从不同角度和大家分享工作心得,并且含有相关Demo,最终小编会发布到GitHub上,供大家下载、分享、交流、指正,下面是源码地址:
GitHub:https://github.com/msxdlb/Spring-Cloud-2020
有问题或错误请及时联系小编或关注小编公众号 “CodeCow”,小编一定及时回复和改正 啦
《 心有多大,舞台就有多大 》 人得有——理想
2020/04/16 午后
SpringCloud(三)- OpenFeign简介及@FeignClient等注解的使用的更多相关文章
- SpringCloud升级之路2020.0.x版-25.OpenFeign简介与使用
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent OpenFeign 的由来和实现思路 在微服务系统中,我们经常会进行 RPC 调用.在 S ...
- SpringCloud实战 | 第五篇:SpringCloud整合OpenFeign实现微服务之间的调用
一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述SpringCloud整合OpenFeign实现微服务之间的相互调用,有兴趣的朋友可 ...
- Mybatis sql映射文件浅析 Mybatis简介(三) 简介
Mybatis sql映射文件浅析 Mybatis简介(三) 简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- 三分钟学会@Autowired@Qualifier@Primary注解
三分钟学会@Autowired@Qualifier@Primary注解 2018.10.08 20:24 154浏览 今天主要简单的跟大家介绍一下spring自动装配相关的@Autowired,@Qu ...
- SpringCloud之OpenFeign
SpringCloud之openFeign Spring Cloud的子项目之一,Spring Cloud OpenFeign以将OpenFeign集成到Spring Boot应用中的方式,为微服务架 ...
- SpringCloud 服务间互相调用 @FeignClient注解
SpringCloud搭建各种微服务之后,服务间通常存在相互调用的需求,SpringCloud提供了@FeignClient 注解非常优雅的解决了这个问题 首先,保证几个服务都在一个Eureka中注册 ...
- springcloud(三):服务提供与调用
上一篇文章我们介绍了eureka服务注册中心的搭建,这篇文章介绍一下如何使用eureka服务注册中心,搭建一个简单的服务端注册服务,客户端去调用服务使用的案例. 案例中有三个角色:服务注册中心.服务提 ...
- springcloud(三)-Eureka
Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...
随机推荐
- LFS资料和SSH远程登录全过程
LFS 即 Linux From Scratch, From Scratch的意思是"白手起家",即从0开始安装Linux,它的所有软件包都需要从源代码开始编译安装.这是通过实际动 ...
- 中国AI觉醒 阿里王坚:云智能将成为大趋势
2019独角兽企业重金招聘Python工程师标准>>> <麻省理工科技评论>新兴科技峰会EmTech China于北京召开.大会中,其中一项热门的讨论便是:中国和美国的科 ...
- Egg Dropping Puzzle
The Two Egg Problem 曾经是Google的一道经典题. 题意:有一个百层高楼,鸡蛋在\(L\)层及以下扔都不碎,在\(L\)层以上都会碎.现在某人有\(k\)个鸡蛋,问在最坏情况下, ...
- SpringBoot上传文件大小限制
SpringBoot默认上传文件大小不能超过1MB,超过之后会报以下异常: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSize ...
- GitHub 热点速览 Vol.18:刷 LeetCode 的正确姿势
作者:HelloGitHub-小鱼干 摘要:找对路子,事半功倍,正如本周 GitHub Trending #刷 LeetCode# 主题想表达的那般,正确的学习姿势方能让人走得更远,走进大厂
- C. Coffee Break 贪心 思维 有点难 有意思
C. Coffee Break 这个贪心之前好像写过,还是感觉挺难的,有点不会写. 这个题目大意是:给你一个数列n个元素,然后给你一天的时间,给你一个间隔时间d, 问你最少要用多少天可以把这个数列的所 ...
- Spring杂谈 | Spring中的AutowireCandidateResolver
接口定义 用于推断一个特定的beanDefinition是否能作为指定依赖的候选者的策略接口 public interface AutowireCandidateResolver { // 默认情况下 ...
- flink优化总结
一.高性能Flink SQL优化技巧 1.Group Aggregate优化技巧 开启MicroBatch或MiniBatch(提升吞吐) MicroBatch和MiniBatch都是微批处理,只是微 ...
- An SWT error has occurred
对话框标题:Problem Occurred 对话框内容:Unhandled event loop exception No more handles 对话框按钮:第一个超链接:Show Error ...
- 简述SpringCloud底层原理
目录 一.业务场景介绍 二.Spring Cloud核心组件:Eureka 三.Spring Cloud核心组件:Feign 四.Spring Cloud核心组件:Ribbon 五.Spring Cl ...