feign实现远程调用

2022年12月1日07:59:15

1、简介
Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。

2、导入jar包

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--由于feign整合了ribbon的负载均衡,所以需要引入ribbon的依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>
<!--需要从eureka拉取服务-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-netflix-eureka-client</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>

3、启动类添加注解支持

@EnableFeignClients

4、客户端编写

  //定义接口
    package com.sun.client;
    
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.GetMapping;
    
    @FeignClient(value = "user-service")   //声明这是feign的客户端
    public interface UserFeignClient {
        @GetMapping("user")
        public String getUser();
    }
    注释:
这是一个接口,Feign会通过动态代理,帮我们生成实现类。这点跟mybatis的mapper很像
@FeignClient,声明这是一个Feign客户端,类似@Mapper注解。同时通过value属性指定服务名称
接口中的定义方法,完全采用SpringMVC的注解,Feign会根据注解帮我们生成URL,并访问获取结果
改造原来的调用逻辑,不再调用UserDao:

	 //实现调用
    @Autowired
    private UserFeignClient userFeignClient;
    @GetMapping("feign")
    public Object feign(){
       return userFeignClient.getUser();
    }

5、feign自动实现负载均衡
6、feign的重试

#feign的重试与ribbon的配置相同,只要添加相应的配置即可。
client:
  ribbon:
      MaxAutoRetries: 1	#配置首台服务器重试1次
      MaxAutoRetriesNextServer: 2#配置其他服务器重试两次
      ConnectTimeout: 500    #链接超时时间
      ReadTimeout: 2000    #请求处理时间
      OkToRetryOnAllOperations: true    #每个操作都开启重试机制

7、feign与hystrix的集成配置熔断机制

a、 添加熔断配置

feign:
     hystrix:
         enabled: true     #允许熔断

b、添加熔断处理类

//实现 UserFeignClient接口
    @Component
    public class UserFeignClientImpl implements UserFeignClient {
        @Override
        public String getUser() {
            return "访问人数过多";
        }
    }

c、实现调用

@FeignClient(value = "user-service",fallback = UserFeignClientImpl.class)   //声明这是feign的客户端     fallback  哪个出现访问延迟 就调用哪个方法的实现返回处理结果
public interface UserFeignClient {   //接口定义
    @GetMapping("user")
    public String getUser();
}
//调用
@Autowired    
    private UserFeignClient userFeignClient;
    @GetMapping("feign")
    public Object feign(){
       return userFeignClient.getUser();
    }
  • 作者:时光是首无声的歌
  • 原文链接:https://blog.csdn.net/qq_42896477/article/details/88880526
    更新时间:2022年12月1日07:59:15 ,共 2230 字。