栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Cloud Open Feign

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Cloud Open Feign

Spring Cloud Open Feign 简介

Feign是⼀个声明式的HTTP客户端组件,它旨在是编写Http客户端变得更加容易。OpenFeign添加
了对于Spring MVC注解的⽀持,同时集成了Spring Cloud LoadBalancer和Spring Cloud
CircuitBreaker,在使⽤Feign时,提供负载均衡和熔断降级的功能。

OpenFeign的作用

OpenFeign的设计宗旨式简化Java Http客户端的开发。Feign在restTemplate的基础上做了进一步的封装,由其来帮助我们定义和实现依赖服务接口的定义。在OpenFeign的协助下,我们只需创建一个接口并使用注解的方式进行配置(类似于Dao接口上面的Mapper注解)即可完成对服务提供方的接口绑定,大大简化了Spring cloud Ribbon的开发,自动封装服务调用客户端的开发量。

OpenFeign集成了Ribbon,利用ribbon维护了服务列表,并且通过ribbon实现了客户端的负载均衡。与ribbon不同的是,通过OpenFeign只需要定义服务绑定接口且以申明式的方法,优雅而简单的实现了服务调用。

OpenFeign入门使用

1.引入依赖

  
      org.springframework.cloud
      spring-cloud-starter-openfeign
  
  
      org.springframework.cloud
      spring-cloud-starter-netflix-eureka-client
  
  
      org.springframework.boot
      spring-boot-starter-web
  

2.启动类编写

使⽤@EnableFeignClients启用OpenFeign功能

@EnableEurekaClient //启用服务注册客户端
@SpringBootApplication 
@EnableFeignClients //启用OpenFeign
public class OpenFeignApplication {
    public static void main(String[] args) {
        SpringApplication.run(OpenFeignMain.class,args);
    }
}

3.application.yml配置

server:
  port: 90001
spring:
  application:
    name: cloud-order

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:9000/eureka/ #服务中心地址
  instance:
    prefer-ip-address: true #显示ip地址

4.编写接口类

@FeignClient(value = "payment")
public interface PaymentClient {
	@GetMapping("/payment/{id}")
	public Payment payment(@PathVariable("id") Integer id);
}

注解@FeignClient注解中,“payment”是服务名,使⽤这个名字来从Eureka服务列表中得到相应的服务,来创建LoadBalancer客户端,也可以使⽤url属性。

注解@GetMapping中value的属性值为你需要调用服务方法的请求url。

在controller中使用FeignClient访问接口类中声明的服务,代码如下

@Autowired
private PaymentClient paymentClient;
@GetMapping("/feign/payment/{id}")
public ResponseEntity getPaymentByFeign(@PathVariable("id")Integer id) {
    Payment payment = paymentClient.payment(id);
    return ResponseEntity.ok(payment);
}

5.启动并测试

访问http://localhost:9001/feign/payment/123,执⾏效果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-onflezlN-1648106338673)(/Users/invictus/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/917bad4b2d9ad9a6d735f2ed31cc46f9/Message/MessageTemp/7dbc453bab701981a5042f13a432528b/Image/7911648105730_.pic.jpg)]

OpenFeign进阶

1.超时配置

OpenFeign提供了2个超时参数。

connectTimeout防⽌由于服务器处理时间⻓⽽阻塞调⽤者。readTimeout 从连接建⽴时开始应⽤,在返回响应时间过⻓时触发

OpenFeign默认超时时间为1s,超过1s就会返回错误页面。如果我们的接口处理业务确实超过1s,就需要对接口进行超时配置。

对于所有的FeignClient配置,可以使⽤"default"代替,代码如下。

feign:
  client:
    config:
      default:
        connectTimeout: 5000 #防⽌由于服务器处理时间⻓⽽阻塞调⽤者
        readTimeout: 5000 #从连接建⽴时开始应⽤,在返回响应时间过⻓时触发

设置openFeign的超时时间为5s

如果只对于具体FeignClient配置,可以把default换成具体的FeignClient的名字,代码如下

feign:
  client:
    config:
      feignName: //需要配置Feign的名称
        connectTimeout: 5000 #防⽌由于服务器处理时间⻓⽽阻塞调⽤者
        readTimeout: 5000 #从连接建⽴时开始应⽤,在返回响应时间过⻓时触发

2.openFeign⽇志

可以配置打开Feign⽇志,显示Feign调⽤的详细信息,⽐如请求和响应的headers、body和
metadata。具体步骤如下:

设置⽇志级别
Feign Logging只响应debug级别,在application.yml中配置如下。

logging:
  level:
    com.cxl: debug

配置FeignLoggerLevel
可以在配置类中配置Logger.Level,告诉配置类Feign需要打印的内容,具体代码如下。

@Configuration
public class FooConfiguration {
@Bean
Logger.Level feignLoggerLevel() {
	return Logger.Level.FULL;
	}
}

其中Logger.Level级别详情如下:

NONE,⽆⽇志记录(默认)。BASIC, 只记录请求⽅法和 URL 以及响应状态码和执⾏时间。HEADERS, 记录基本信息以及请求和响应标头。FULL, 记录请求和响应的标头、正⽂和元数据

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/777622.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号