目录

1 Feign(OpenFeign)是什么

2 Feign能干什么

3 Feign与OpenFeign的区别

4 使用

4.1 pom.xml

4.2 application.yml

4.3 启动类

4.4 业务类

5 关于日志

6 Feign超时控制


1 Feign(OpenFeign)是什么

官网介绍:https://cloud.spring.io/spring-cloud-openfeign/reference/html/。

Feign是一个声明式WebService客户端,使用Feign能让编写WebService客户端更加简单。

Feign的使用方法是:定义一个服务接口,并在上面添加注解。Feign可以与Eureka、Ribbon组合使用从而支持负载均衡。

两个注解:1)@EnableFeignClients 启动Feign客户端 2)@FeignClient 定义Feign客户端。

2 Feign能干什么

Feign致力于让编写Http客户端更加简单。

之前博客中使用Ribbon+RestTemplate组合,利用RestTemplate对http请求的封装处理,形成一套模板化的封装方法。

但是实际开发中,大多数时候对服务依赖的调用并不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。Feign就是在这个基础上做了进一步的封装,由它来定义并实现依赖服务接口的定义。

在Feign的实现下,开发者只需要创建一个接口并使用注解的方式进行配置,即可完成对服务提供方接口的绑定,简化了使用SpringCloud Ribbon时,自动封装服务调用调用客户端的开发量。(此前dao接口上标注Mapper注解,现在是在一个微服务接口上面标注一个Feign注解即可)

Feign集成了Ribbon。

3 Feign与OpenFeign的区别

4 使用

4.1 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud2020</artifactId><groupId>com.bighuan.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-consumer-feign-order80</artifactId><dependencies><!--openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- Eureka client--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!--引入自定义的api通用包,可以使用Payment支付Entity--><dependency><groupId>com.bighuan.springcloud</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.bighuan.springcloud.OrderFeignMain80</mainClass></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

4.2 application.yml

server:port: 80
spring:application:name: cloud-order-service
eureka:instance:instance-id: order${server.port}   #例如:order80prefer-ip-address: true  # 访问路径可以显示ip地址client:# 表示是否将自己注册进Eureka Server,默认为trueregister-with-eureka: true# 是否从Eureka Server获取已有的注册信息,默认为true,单节点无所谓,集群必须设置为true,才能配合ribbon使用负载均衡fetch-registry: trueservice-url:# defaultZone: http://localhost:7001/eurekadefaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka # 集群版
ribbon:# 处理请求的超时时间,默认为1秒ReadTimeout: 5000# 连接建立的超时时间,默认1秒ConnectTimeout: 5000
logging:level:# feign日志以什么级别监控哪个接口#com.bighuan.springcloud.service.PaymentFeignService: debugcom.bighuan.springcloud.service: debug

4.3 启动类

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients // 激活Feign
public class OrderFeignMain80 {public static void main(String[] args) {SpringApplication.run(OrderFeignMain80.class, args);}
}

4.4 业务类

接口类:

@Component
// // 设置远程服务,将一个远程服务映射为一个本地方法调用
@FeignClient(name = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {/*** 查询** @param id* @return*/@GetMapping(value = "/payment/get/{id}")CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);@GetMapping(value = "/payment/feign/timeout")String paymentFeignTimeOut();
}

控制类:

@RestController
@Slf4j
public class OrderFeignController {@Resourceprivate PaymentFeignService paymentFeignService;@GetMapping(value = "/consumer/payment/get/{id}")public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) {log.info("id:" + id);return paymentFeignService.getPaymentById(id);}@GetMapping(value = "/consumer/payment/feign/timeout")public String paymentFeignTimeOut() {return paymentFeignService.paymentFeignTimeOut();}
}

5 关于日志

Feign提供了日志打印功能,可通过配置调整日志打印级别,从而了解Feign中Http请求的细节。

配置示例:

@Configuration
public class FeignConfig {@Beanpublic Logger.Level feignLoggerLevel(){return Logger.Level.FULL;}
}

yml文件中需要进行相应的配置,已在前面的文件中贴出。

6 Feign超时控制

查看这篇文章:https://www.cnblogs.com/WaterGe/p/11687118.html

微服务学习之OpenFeign【Hoxton.SR1版】相关推荐

  1. .NET Core 微服务学习与实践系列文章目录索引(2019版)

    Photo :.NET Core 文 | Edison Zhou 2018年,我开始学习和实践.NET Core,并开始了微服务的学习,以及通过各种开源组件搭建服务治理技术方案,并在学习过程中总结了一 ...

  2. 【福利】赠书:Spring Cloud与Docker微服务架构实战(第2版)

    本次福利送出好友周立的第二版书籍! 正在关注和使用Spring Cloud的朋友们不要错过哦! 内容提要 <Spring Cloud与Docker微服务架构实战(第2版)>基于Spring ...

  3. 微服务学习总结4(网关和consul结合)

    先上一张图片: 首先要启动consul服务,用于对三个日志服务的注册和发现.(默认端口8500) 然后启动三个日志服务,端口分别为5726.5727.5728. 最后启动网关服务,用于转发客户端请求, ...

  4. Java微服务学习笔记(一):微服务架构的概念理解

    Java微服务学习笔记 Tips:入门学习时粗略整理,仅供参考 (一):架构的基础理解 文章目录 Java微服务学习笔记 前言 一.微服务是什么? 二.常用开源微服务框架演化 1. Dubbo 2. ...

  5. 微服务学习笔记(二)Ribbon+OpenFeign+Gateway

    文章目录 4 Ribbon负载均衡 概述 RestTemplate 流程 策略 配置策略 饥饿加载 与Nginx对比 5 OpenFeign远程调用 RestTemplate调用的问题 与Feign对 ...

  6. docker入门与部署微服务--学习笔记

    最近公司进一步去windows,走向 linux+云化. 原来的一大坨windows虚拟机服务器都要转向linux, 既然走向linux的话,那么docker肯定是要涉足的. 故学习了docker入门 ...

  7. Spring Cloud 微服务学习与实践

    第一章:微服务架构概述 1-1. 系统进化理论概述 在系统架构与设计的实践中,经历了两个阶段,一个阶段是早些年常见的集中式 系统,一个阶段是近年来流行的分布式系统: 集中式系统: 集中式系统也叫单体应 ...

  8. 微服务学习之网关(Gateway)的搭建及使用

    微服务系列 1.Nacus 服务搭建及使用 2.Nacos 配置中心 3.Nacos 服务注册与发现之OpenFeign服务间调用 4.Spring Security & Oauth2 认证授 ...

  9. 微服务学习之Nacos(服务注册与发现)

    微服务系列 1.Nacus 服务搭建及使用 2.Nacos 配置中心 3.Nacos 服务注册与发现之OpenFeign服务间调用 4.Spring Security & Oauth2 认证授 ...

  10. 【干货分享】可能是东半球最全的.NET Core跨平台微服务学习资源

    如果你发现还有西半球的资源,烦请相告,不胜感谢! 一.Asp.net Core基础 微软英文官网 .NET Core 微软中文官网 GitHub 用ASP.NET内核和Azure构建现代Web应用程序 ...

最新文章

  1. [翻译]SQL Server 2005 Analysis Services性能指南
  2. 控制器view生命周期
  3. boost::histogram::indexed用法的测试程序
  4. Nginx使用服务信号升级
  5. 几种人类设计的永动机,最后一个彻底服了!| 今日最佳
  6. grpc python异步实现_在grpcpython中处理异步流请求
  7. java面试题 Object类的常见方法总结
  8. 升级完ssh之后login incorrect怎么解决_魔兽世界怀旧服:伏击搜索流,盗贼另类升级刷钱方法简单攻略...
  9. 骁龙660_骁龙660卖到4000元!这款手机哪里来的自信?
  10. 电脑围棋中的人工智能技术
  11. 关于下载安装pycharm专业版的步骤
  12. JavaCV音视频开发宝典:JavaCV实现mp3音频直播FM在线电台服务,无需流媒体服务,浏览器原生audio标签直接播放mp3,支持rtsp/rtmp/flv/hls/本地音视频源直接转码到mp3
  13. 输入年份和月份,判断是否闰年?并根据月份判断是什么季节和有多少天
  14. 2021 年互联网大厂职级对应薪资一览表
  15. 51nod-生产口罩(拓补排序+DP)by zyz
  16. css ime-mode控制输入全角和半角
  17. 无线通信中的最大比合并(MRC)分析
  18. 结构化方法和面向对象方法详解
  19. 20221205英语学习
  20. 用友T+销售出库单审核之后成本金额会变化

热门文章

  1. 三星 NAND 存储器新厂施工顺遂,上半年有望如期投产
  2. 让海底电缆给数据中心提供更快的直连
  3. Hibernate级联删除时:Cannot delete or update a parent row: a foreign key constraint fails异常...
  4. Shell账户管理,用户和组管理
  5. 13.卷2(进程间通信)---Posix共享内存区
  6. 计算机桌面颜色突然变灰,Win10桌面颜色变为灰的两种解决方法
  7. 模态框 (框架引入出现的问题)
  8. css中的伪类与伪元素的区别
  9. Mybatis中javaType和jdbcType对应和CRUD例子
  10. [Bzoj3262]陌上花开(CDQ分治树状数组||树套树)