Spring Cloud Alibaba(五) 集成openFeign

目录

Spring Cloud Alibaba(一) 简介

Spring Cloud Alibaba(二) 环境搭建及nacos注册中心配置中心

Spring Cloud Alibaba(三) 搭建API网关 gateway动态路由

Spring Cloud Alibaba(四) 项目分层

什么是Feign

Feign是一种声明式、模板化的HTTP客户端(仅在Application Client中使用)(称feign作用:声明式服务调用)。声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求。

什么是声明式服务调用

声明式调用就像调用本地方法一样调用远程方法;无感知发送http请求。

Spring Cloud的声明式调用, 可以做到使用 HTTP请求远程服务时能就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。Feign的应用,让Spring Cloud微服务调用像Dubbo一样,Application Client直接通过接口方法调用Application Service,而不需要通过常规的RestTemplate构造请求再解析返回数据。它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。

一、集成OpenFeign

  1. 引入依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>
复制代码
  1. 启动类增加注解
@EnableFeignClients
复制代码
  1. 增加配置信息

#feign配置
feign:
  client:
    config:
      default:
        #feign客户端建立连接超时时间
        connect-timeout: 2000
        #feign客户端建立连接后读取资源超时时间
        read-timeout: 10000
  #开启Hystrix断路器
  hystrix:
    enabled: true
#Hystrix配置
hystrix:
  command:
    HystrixCommandKey:
      execution:
        isolation:
          thread:
            #在调用方配置,被该调用方的指定方法(HystrixCommandKey方法名)的超时时间是该值
            timeoutInMilliseconds: 4000
    default:
      circuitBreaker:
        #出错百分比阈值,当达到此阈值后,开始短路。默认50%
        errorThresholdPercentage: 50%
        # 简言之,10s内请求失败数量达到20个,断路器开。  当在配置时间窗口内达到此数量的失败后,进行短路。默认20个
        requestVolumeThreshold: 20
        #短路多久以后开始尝试是否恢复,默认5s
        sleepWindowInMilliseconds: 5
      execution:
        isolation:
          thread:
            #配置Hystrix 超时时间   超时关闭
            #hystrix.command.default.execution.timeout.enabled=false
            #超时时间(默认1000ms)在调用方配置,被该调用方的所有方法的超时时间都是该值,优先级低于下边的指定配置
            timeoutInMilliseconds: 3000
      fallback:
        isolation:
          semaphore:
            #调用线程允许请求HystrixCommand.GetFallback()的最大数量,默认10。超出时将会有异常抛出,
            #注意:该项配置对于THREAD隔离模式也起作用
            maxConcurrentRequests: 50000
  threadpool:
    default:
      #线程池核心线程数 默认为10
      coreSize: 10
      #最大排队长度。默认-1  如果要从-1换成其他值则需重启,即该值不能动态调整,若要动态调整,需要使用到下边这个配置
      maxQueueSize: 100
      #排队线程数量阈值,默认为5,达到时拒绝,如果配置了该选项,队列的大小是该队列
      queueSizeRejectionThreshold: 5
复制代码
  1. 在zhc-system-api中新建几个类
@Data
public class TestData {
    private Long id;

    private String name;

}
复制代码
//name NACOS中服务的名称
@FeignClient(name = "ZHC-SYSTEM-SERVICE", fallback = FeignSystemClientCallback.class)
public interface FeignTestClient {
    /**
     * 测试接口
     *
     * @return
     */
    @RequestMapping(value = "/test", method = RequestMethod.POST)
    String test(@RequestBody TestData testData);
}
复制代码
@Slf4j
@Component
public class FeignSystemClientCallback  implements FeignTestClient {
    @Override
    public String test(TestData testData) {
        return "服务器忙!请稍后重试!!!";
    }
}
复制代码

在zhc-system-web中新建一个测试方法

@RequestMapping(value = "/test", method = RequestMethod.POST)
public String test(@RequestBody TestData testData){
    log.info(String.valueOf(testData));
    return testDataService.select().toString();
}
复制代码
  1. 调用 在zhc-business-service中引入zhc-system-api模块的依赖
<dependency>
    <groupId>com.zhc.cloud</groupId>
    <artifactId>zhc-system-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>
复制代码

然后在一个测试方法中写调用这个 /test 方法 image.png 然后调用这个测试方法,结果成功了 image.png 这样集成OpenFeign就成功了

差不多就这样了,有问题可以看一下源代码: GitHub 、Gitee (我是先搭建的项目,然后后补的文档。所以说项目和文档可能不太一样,有问题可以问我一下)

分类:
后端