ribbon,feign选择和与Hystrix的整合应用

简介: ribbon,feign选择和与Hystrix的整合应用


image.png

1.ribbon与feign的区别

  1. feign是在ribbon上封装的
  2. ribbon请求需要自己拼接 而 Feign 是一个使用起来更加方便的 HTTP 客戶端,使用起来就像是调用自身工程的方法,而感觉不到是调用远程方法。
    image.png
  3. feign封装了负载均衡功能
  4. 可以统一管理 方便复用
  5. 极简整合hystrix

2.spring boot使用feign+hystrix

1.修改application类

@SpringBootApplication(scanBasePackages = "com.vanpeng.cms")
@ComponentScan("com.vanpeng.cms.*")
@EnableCaching
@EnableEurekaClient
@EnableSwagger2
@EnableFeignClients  #开启feign
@EnableCircuitBreaker  #开启hystrix  
//@EnableApolloConfig
public class CmsApplication {
    public static void main(String[] args) {
        SpringApplication.run(CmsApplication.class, args);
    }
    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

2.修改application.yml

feign:
  hystrix:
    enabled: true  #hystrix默认关闭需要 开启
ribbon:
  ConnectTimeout: 5000 # 请求连接的超时时间 默认的时间为 1 秒
  ReadTimeout: 5000 # 请求处理的超时时间
hystrix:
  command:
    default:  #default全局有效,service id指定应用有效
      execution:
        timeout:
          #如果enabled设置为false,则请求超时交给ribbon控制,为true,则超时作为熔断根据
          enabled: true
        isolation:
          strategy: SEMAPHORE
          thread:
            timeoutInMilliseconds: 5000 #断路器超时时间,默认1000ms
      circuitBreaker:
        enabled: true
        requestVolumeThreshold: 10 #默认20 ,熔断的阈值,如何user服务报错满足3次,熔断器就会打开,就算order之后请求正确的数据也不行。
        sleepWindowInMilliseconds: 8000 #默认5S , 等5S之后熔断器会处于半开状态,然后下一次请求的正确和错误讲决定熔断器是否真的关闭和是否继续打开
        errorThresholdPercentage: 0.5

3.服务间调用

@FeignClient(name = "data-service", fallback = DataFallBack.class) //表明是feign接口 name为被调用服务在erueka上的服务名
public interface DataServiceFeign {
    @PostMapping("/selectDataSetId") //对应着被调用服务的路径   post表明为post请求 请求参数为@RequestBody ResultCatalog resultCatalog
    Result<Object> selectByDataSetId(@RequestBody ResultCatalog resultCatalog);
    @GetMapping("/resourceMenu/selectFeignService/{lecturerUserNo}") //表明为get请求 参数为 @PathVariable(value = "lecturerUserNo") Long lecturerUserNo
    Result<List<ResultCatalog>>
        selectService(@PathVariable(value = "lecturerUserNo") Long lecturerUserNo);
}

4.熔断hystrix

@Component
public class DataFallBack implements DataServiceFeign {  //需要实现feign接口 每个方法对应着每个feign调用的服务 
    @Override
    public Result<Object> selectByDataSetId(ResultCatalog resultCatalog) {
        Result<Object> result = new Result<Object>();
        String error = "调用系统失败。";
        result.setCode(506);
        result.setMessage(error);
        return result;
    }
    @Override
    public Result<List<ResultCatalog>>
        selectServicel(Long lecturerUserNo) {
        Result<List<ResultCatalog>> result = new Result<>();
        String error = "调用系统失败。";
        result.setCode(506);
        result.setMessage(error);
        return result;
    }
}

使用依赖注入调用即可.

public class DataServiceController {
    @Autowired
    DataServiceFeign dataServiceFeign;
    @Autowired
    SystemPortalFeign systemPortalFeign;
    /**
     * ajax数据服务
     * 
     * @param resultMapResourceCatalog
     * @return
     */
    @PostMapping("/DataService")
    public Result
        DataService(@RequestBody ResultCatalog resultCatalog) {
        Result<Object> resultObj = dataServiceFeign.selectByDataSetId(resultCatalog);
    }
}


相关文章
|
9月前
SpringCloud极简入门-Feign开启Hystrix
1.支付服务集成Hystrix 官方文档:https://cloud.spring.io/spring-cloud-static/Greenwich.SR5/single/spring-cloud.html#spring-cloud-feign-hystrix 支付服务 springcloud-pay-server-1040 之前集成了Feign,修改该工程集成Hystrix。我们除了要给Feign开启Hystrix以外还需要为Feign接口编写托底类。
103 0
|
7月前
|
开发框架 负载均衡 Java
Spring Cloud 介绍及负载均衡Ribbon、服务容错Hystrix 组件使用详解
Spring Cloud 介绍及负载均衡Ribbon、服务容错Hystrix 组件使用详解
118 0
|
8月前
|
SpringCloudAlibaba 负载均衡 算法
SpringCloudAliBaba篇之Ribbon负载均衡器:让你的应用从容应对高并发
SpringCloudAliBaba篇之Ribbon负载均衡器:让你的应用从容应对高并发
212 0
|
1月前
|
存储 负载均衡 Java
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️
|
8月前
Ribbon、Feign、Hystrix超时&重试&熔断问题
在使用Ribbon、Feign、Hystrix组合时,因为配置的问题出现以下现象,让我的大脑CPU烧的不行不行(拿我老家话说就是“脑子ran滴奥”)
103 0
|
4月前
|
Java 微服务 Spring
Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用
Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用
43 0
|
4月前
|
负载均衡 算法 Java
SpringCloud - Feign与Ribbon请求负载均衡实践
SpringCloud - Feign与Ribbon请求负载均衡实践
46 0
|
6月前
|
Java Spring
15SpringCloud - 断路器项目示例(Feign Hystrix)
15SpringCloud - 断路器项目示例(Feign Hystrix)
19 0
|
6月前
|
监控 Java
14SpringCloud - 断路器项目示例(Ribbon Hystrix)
14SpringCloud - 断路器项目示例(Ribbon Hystrix)
23 0
|
9月前
|
负载均衡 Java Linux
springCloud搭建、zuul、feign、hystrix、ribbon(内部培训)
springCloud搭建、zuul、feign、hystrix、ribbon(内部培训)
125 0
springCloud搭建、zuul、feign、hystrix、ribbon(内部培训)