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);
    }
}


相关文章
|
开发框架 负载均衡 Java
Spring Cloud 介绍及负载均衡Ribbon、服务容错Hystrix 组件使用详解
Spring Cloud 介绍及负载均衡Ribbon、服务容错Hystrix 组件使用详解
219 0
|
3月前
|
Java 对象存储 开发者
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
62 3
|
5月前
|
负载均衡 Java API
Feign 进行rpc 调用时使用ribbon负载均衡源码解析
Feign 进行rpc 调用时使用ribbon负载均衡源码解析
80 11
|
5月前
|
负载均衡 Java API
通用快照方案问题之Feign添加请求拦截器如何解决
通用快照方案问题之Feign添加请求拦截器如何解决
40 1
|
5月前
|
监控 Cloud Native Java
通用快照方案问题之Hystrix和Ribbon在超时设置上的冲突如何解决
通用快照方案问题之Hystrix和Ribbon在超时设置上的冲突如何解决
56 0
|
5月前
|
负载均衡 算法 Java
通用快照方案问题之Ribbon和RestTemplate的结合使用如何解决
通用快照方案问题之Ribbon和RestTemplate的结合使用如何解决
37 0
|
7月前
|
负载均衡 Java 应用服务中间件
Ribbon、Feign和OpenFeign的区别来了
Ribbon、Feign和OpenFeign的区别来了
312 2
Ribbon、Feign、Hystrix超时&重试&熔断问题
在使用Ribbon、Feign、Hystrix组合时,因为配置的问题出现以下现象,让我的大脑CPU烧的不行不行(拿我老家话说就是“脑子ran滴奥”)
188 0
|
7月前
Springcloud-ribbon和hystrix配置
Springcloud-ribbon和hystrix配置
49 0
|
7月前
|
存储 负载均衡 Java
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️