Feign远程调用组件

Feign

        Feign是Netfix开发的一个轻量级REstFul的HTTP服务客户端,是以java接口注解的方式调用HTTP请求,而不用像java中通过封装HTTP请求报文的方式直接调用,可以帮助我们更加便捷,优雅的调用HTTP API         Feign = RestTemplate + Ribbon + Hystrix
        本质:封装了HTTP调用流程,更符号面向接口化变成习惯,类似于Dubbo的服务调用

 

 Feign的应用

        1.在page微服务项目中导入feign的依赖


     org.springframework.cloud
     spring-cloud-starter-openfeign

        2.在page启动类添加注解,并注释掉Hystrix,Raiibon,把page中对应的内容也注释掉

@EnableFeignClients//开始Feign支持

Feign远程调用组件_第1张图片

 Feign远程调用组件_第2张图片

 Feign远程调用组件_第3张图片

 Feign远程调用组件_第4张图片

         3.在page微服务项目下创建配置类ProductFeign

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient(name = "leq-service-product")

public interface ProductFeign {
 @RequestMapping("/product/findById/{id}")
 Products queryProductById(@PathVariable Integer id);
 @RequestMapping("/server/getPort")
 String findServerPort();
}

        4.在page的控制层类调用 ProductFeign

    @Autowired
    private ProductFeign productFeign;

          分别调用各个接口所需的方法

Feign远程调用组件_第5张图片

Feign远程调用组件_第6张图片

 

          5.配置appllicaiton核心文件(负载均衡)

#通过远程服务的名称作为前缀的限定,表示针对该服务配置Ribbon的负载均衡
#请求连接的超时时间
leq-service-product.ribbon.ConnectTimeout=2000
#请求处理超时时间
leq-service-product.ribbon.ReadTimeout=10000
#对所有的操作都进行重试
leq-service-product.ribbon.OkToRetryOnAllOperations=true
#对当前选中实例重试次数,不包括第一次调用
leq-service-product.ribbon.MaxAutoRetries=0
#切换实例的重试次数
leq-service-product.ribbon.MaxAutoRetriesNextServer=0
#负载策略调整
leq-service-product.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

        6.重启page微服务项目,访问以前的接口,可以发现并没有报错,因为feign虽然集合了熔断,但是默认是关闭的,需要我们手动开启Feign远程调用组件_第7张图片Feign远程调用组件_第8张图片

,suor  

 

Feign远程调用组件_第9张图片

 

        7.配置appllicaiton核心文件(熔断)

#开启Feign中集成的Hystrix的熔断器功能
feign.hystrix.enabled=true

Feign远程调用组件_第10张图片        重启后看到熔断生效了,在超过默认1s的时长后就报这个错误了

        8.异常调用类ProductFeignImpl

 
import org.springframework.stereotype.Component;

@Component
public class ProductFeignImpl implements ProductFeign {
//    如果远程服务无法返回值数据,则将重写的方法返回
    @Override
    public Products queryProductById(Integer id) {
        return null;
    }

    @Override
    public String findServerPort() {
        return "-1";
    }
}

        需要在前面的注解加上一个属性

        fallback表示如果远程的调用出现错误,则本地的回退方法在哪一个类中,手动指定

 fallback = ProductFeignImpl.class 

        9.重启page微服务项目,可以看到我们配置的异常处理类生效了Feign远程调用组件_第11张图片

Feign远程调用组件_第12张图片 

 

我们也可以进行别的配置:

        Feign对请求压缩和响应压缩的支持:

# 默认不开启
feign.compression.request.enabled=true
# 设置压缩的数据类型,设置为默认值
feign.compression.request.min-request-size=2048
#设置触发压缩的大小下限,2048为默认值
feign.compression.request.mime-types=text/html,application/xml,application/json
#默认不开启
feign.compression.response.enabled=true

        配置熔断策略;

# 配置熔断策略
# 并发执行的最大线程数,默认10
hystrix.threadpool.default.coreSize= 10 
#BlockingQueue的最大队列数,默认值-1
hystrix.threadpool.default.maxQueueSize=1500
# 即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝,默认值5
hystrix.threadpool.default.queueSizeRejectionThreshold=1000
# 强制打开熔断器,如果该属性设置为true,强制断路器进?打开状态,将会拒绝所有的请求,默认false关闭的
hystrix.command.default.circuitBreaker.forceOpen= false
# 触发熔断错误比例阈值,默认值50% 
hystrix.command.default.circuitBreaker.errorThresholdPercentage= 50
# 熔断后休眠时长,默认值5秒
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds= 3000
# 熔断触发最小请求次数,默认值是20
hystrix.command.default.circuitBreaker.requestVolumeThreshold= 2
# 熔断超时设置,默认为1秒
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds= 2000

           在配置后重启该项目,只要我们之前写的接口正常访问就表明我们的配置没有问题Feign远程调用组件_第13张图片

 Feign远程调用组件_第14张图片Feign远程调用组件_第15张图片

 Feign远程调用组件_第16张图片

 

 

你可能感兴趣的:(spring,cloud,feign)