【SpringCloud学习笔记】Feign

Feign 的使用

  • 什么是Feign

Feign是声明性的web服务客户端。它使编写web服务客户端更加容易,它封装类Ribbon和RestTemplate

  • Feign vs OpenFeign

1、Feign是Netflix公司写的,是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端,是SpringCloud中的第一代负载均衡客户端
2、OpenFeign是SpringCloud自己研发的,在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。是SpringCloud中的第二代负载均衡客户端
3、Feign本身不支持Spring MVC的注解,使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务
4、OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务

  • 如何在项目中使用,pom文件导入依赖
<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-openfeignartifactId>
dependency>

搭建项目

【SpringCloud学习笔记】Feign_第1张图片

user-service服务提供者

  • yaml配置文件
server:
  port: 9001
spring:
  application:
    name: user-service
eureka:
  instance:
    hostname: 127.0.0.1
  client:
    register-with-eureka: true #默认值是true,是否将自己注册到注册中心
    fetch-registry: false # 默认值是true,是否从注册中心拉取服务
    service-url: #注册中信对外暴露的注册中心地址
      defaultZone: http://localhost:8761/eureka/
  • 控制层对外提供一个获取用户信息的接口
@RestController
public class UserController {

    @GetMapping(value = "/getUserInfo")
    public UserInfo getUserInfo() {
        UserInfo userInfo = new UserInfo();
        userInfo.setId(1);
        userInfo.setName("小明");
        userInfo.setAge(20);
        userInfo.setAddress("杭州市");
        return userInfo;
    }
}

feign-consumer

  • pom.xml文件中引入OpenFeign 组件
<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
  • ymal配置文件
server:
  port: 9002

spring:
  application:
    name: feign-consumer

eureka:
  instance:
    hostname: 127.0.0.1
  client:
    register-with-eureka: true #默认值是true,是否将自己注册到注册中心
    fetch-registry: true #默认值是true,是否从注册中心拉取服务
    service-url: #注册中信对外暴露的注册中心地址
      defaultZone: http://localhost:8761/eureka/
  • 消费者定义一个UserServiceApi 接口,在接口上添加@FeignClient注解,括号内是服务名
@FeignClient(name = "user-service")
public interface UserServiceApi {

    @GetMapping(value = "/getUserInfo")
    UserInfo getUserInfo();
}
  • 在业务处理的代码中引入UserServiceApi
@RestController
public class UserController {

    @Autowired
    private UserServiceApi userServiceApi;

    @GetMapping(value = "/consumer/getUserInfo")
    public UserInfo getUserInfo() {
        return userServiceApi.getUserInfo();
    }
}
  • 启动类上添加@EnableFeignClients注解,在服务启动时,@FeignClints修饰的接口会被Spring扫描到,基于动态代理生成本地JDK Proxy代理对象实例,然后将这些代理实例注册到IOC容器中,当远程接口被调用时,由Proxy代理实例去完成真正的远程访问
@SpringBootApplication
@EnableFeignClients
public class FeignConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(FeignConsumerApplication.class, args);
    }
}
  • openfeign的超时时间,默认的超时时间是1s,如果请求超过1s就会报读取超时错误
    【SpringCloud学习笔记】Feign_第2张图片
    在配置文件中配置openfeign的超时时间,将超时时间配置长一点
feign:
  client:
    config:
      default:
        # 连接超时时间
        connectTimeout: 3000
        # 请求处理超时时间
        readTimeout: 3000

你可能感兴趣的:(spring,cloud,学习,java)