---
url: /diary/spring/open-feign/index.md
description: Spring Cloud 学习笔记第五篇，OpenFeign 声明式服务调用，简化微服务间的 HTTP 调用。
---
openFeign是一个声明式的Web 服务客户端，让编写Web服务客户端变得非常容易，只需创建一个借口并在借口上添加注解即可。

用于服务调用方

## 1.添加pom依赖

```xml

<dependencies>
    <!--openfeign-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>
```

## 2.application.yml

```yaml
server:
  port: 80

spring:
  application:
    name: cloud-consumer-feign-order


#设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
  #指的是建立连接所用的时间，适用于网络状况正常的情况下,两端连接所用的时间
  ReadTimeout: 5000
  #指的是建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000
```

## 3.主启动

```java
@SpringBootApplication
@EnableFeignClients //说明是feign 客户端
public class FeignOrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(FeignOrderMain80.class, args);
    }
}
```

## 4.service接口

```java
@Component
//作为feign组件的接口 以及将要调用的服务名称
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {

    @GetMapping(value = "/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id);

    @PostMapping(value = "/payment/creat")
    public CommonResult creat(@RequestBody Payment payment);

}
```

## 5.controller调用

```java
@RestController
@Slf4j
public class FeignOrderController {
    @Resource
    public PaymentFeignService paymentFeignService;


    @GetMapping(value = "/consumer/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id) {
        return paymentFeignService.getPaymentById(id);
    }

}
```

## 6.配置详细日志

FeignConfig.java

```java
@Configuration
public class FeignConfig {

    @Bean
    Logger.Level  feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}
```

application.xml

```yaml
logging:
  level:
    # feign日志以什么级别监控哪个接口
    org.mc.mycloud.service.PaymentFeignService: debug
```
