2.Openfeign注册服务内部调用

1.在搭建完成服务注册中心和注册服务后,服务消费项目pom.xml加入feign依赖

<!--eureka-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--feign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.服务消费项目配置文件application.yml加服务信息配置

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8001/eureka/  #注册中心地址
#与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址,默认是http://localhost:800#1/eureka;多个地址可用,分隔

3.项目启动类添加

@EnableDiscoveryClient 
@EnableFeignClients  注解
@SpringBootApplication
@EnableDiscoveryClient//开启发现服务功能
                  
public class ServiceConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceConsumerApplication.class, args);
    }
}

4.创建Feign接口类

//@FeignClient注解用于指定从哪个服务中调用功能
//这里的value 对应调用服务的spring.applicatoin.name
@Component
@FeignClient(value = "service-provider")
public interface UserServiceClient {
    /**
     * 查找用户列表
     */
    @PostMapping("/user/getUserList") //对应被调用服务的mapping
    ResultEntity getUserList(@RequestBody Map<String, Object> body);

}

5.feign接口调用

@Autowired
private UserServiceClient userServiceClient;

@PostMapping("/getUserList")
public ResultEntity getUserList(@RequestBody Map<String, Object> body) {
    ResultEntity userList = userServiceClient.getUserList(body);
    return userList;
}

在使用Feign的时候,要注意使用requestBody,应该使用@PostMapping
1、执行流程
总到来说,Feign的源码实现的过程如下:
(1)首先通过@EnableFeignCleints注解开启FeignCleint
(2)根据Feign的规则实现接口,并加@FeignCleint注解
(3)程序启动后,会进行包扫描,扫描所有的@ FeignCleint的注解的类,并将这些信息注入到ioc容器中。
(4)当接口的方法被调用,通过jdk的代理,来生成具体的RequesTemplate
(5)RequesTemplate在生成Request
(6)Request交给Client去处理,其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp
(7)最后Client被封装到LoadBalanceClient类,这个类结合类Ribbon做到了负载均衡。

2、Feign和Ribbon比较优点
(1) feign本身里面就包含有了ribbon,只是对于ribbon进行进一步封装
(2) feign自身是一个声明式的伪http客户端,写起来更加思路清晰和方便
(3) fegin是一个采用基于接口的注解的编程方式,更加简便

6.openFeign接口超时控制
openFeign默认客户端一般1s,超时报错
yml配置下列即可解决

ribbon:
  #指的是建立连接所用的时间,适用于网络状态正常的情况,两端连接所用的时间
  ReadTimeout: 5000
  #指的是建立链接后从服务读取到可用资源所用的时间
  ConnectTimeout: 5000

7.openFeign日志增强
config包添加FeignConfig

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Component
public class FeignConfig {
    /**
     *级别:
     * NONE,
     * BASIC,
     * HEADERS,
     * FULL
     */
    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

yml配置添加

logging:
  level:
    #feign 日志以什么级别监控哪个接口(ProviderOneClient:Feign 接口包全路径)
    com.douyu.serviceconsumer.feignclient.ProviderOneClient: debug
   # com.douyu.serviceconsumer.feignclient: debug #或者到包级别
上一篇:openFeign 服务接口的调用04——OpenFeign 日志打印功能


下一篇:SpringBoot引入openfeign 报错:spring-cloud-starter-openfeign:unknown