Spring Cloud 学习——5.使用 feign 的 hystrix 支持

1.前言

  hystrix 是一个微服务系统的断路器组件,上文介绍了 spring cloud 通过 netfix hystrix 提供对 hystrix 的支持。同时 spring cloud 也提供了 openfeign 的支持, 而 openfeign 本身就已经内置了 hystrix 支持。所以本文介绍一个使用 openfeign 内置 hystrix 的简单示例。

  前文链接:

    Spring Cloud 学习——3.openfeign实现声明式服务调用

    Spring Cloud 学习——4.netfix hystrix 实现断路器

2.添加依赖

  由于使用的是 openfeign 内置的 hystrix 支持,所以添加 openfeign 依赖即可

<dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
                <version>2.x.x</version>
            </dependency>

3.服务提供者

@RestController
@RequestMapping("/user")
public class UserController {
    @GetMapping("/get/{id}")
    public User get(@PathVariable("id")String id){
        System.out.println("/user/get/{id},id=" + id);
        User user = new User();
        user.setId(id);
        user.setUsername("onezai");
        user.setPassword("123456");
        user.setMobile("13128921555");
        return user;
    }
}

4.服务调用者

@FeignClient(value = "sys", fallback = UserClientFallback.class)
public interface UserClient {
    @GetMapping(value = "/sys/user/get/{id}")
    User getUserById(@PathVariable("id") String id);
}

   @FeignClient  注解声明了一个 feign 客户端,作为服务调用者。其中,fallback 属性指定了断路回退处理的类(为了保持回退处理方法的参数一致,通常建议该类实现当前服务调用接口,本例中即实现 UserClient 接口),回退类代码:

@Component
public class UserClientFallback implements UserClient {
    @Override
    public User getUserById(String id) {
        User user = new User();
        user.setId(id);
        user.setUsername("fallbackUser");
        user.setPassword("fallbackPass");
        user.setMobile("13122226666");
        return user;
    }
}

5.启用 feign 的 hystrix 支持

  openfeign 默认配置是关闭 hystrix 的,在 application.properties 文件中添加配置以启用:

feign.hystrix.enabled=true

6.服务调用

@RestController
@RequestMapping("/")
public class HomeController {
    @Autowired
    EurekaClient eurekaClient;
    @Autowired
    RestTemplate restTemplate;
    @Autowired
    UserClient userClient;

    @GetMapping("/getUser/{id}")
//    @HystrixCommand(fallbackMethod = "getUserDefault")
    public User getUser(@PathVariable("id")String id){
        User user = userClient.getUserById(id);
        System.out.println("user:\n" + JSONObject.fromObject(user).toString());
        return user;
    }

7.验证结果

  7.1.正常情况下(未断路情况)

  7.2.异常情况下(断路情况)

    同样,我们注释掉  @GetMapping("/get/{id}")  ,人为地创造服务不可用条件,结果:

8.验证成功

  从结果可以看出,断路回退处理成功。

  相比之下我们可以看到,使用 openfeign 内置的 hystrix 支持,可以将断路回退处理的代码单独抽离出来,避免污染调用服务的业务代码。如果单独使用 netfix hystrix,需要在业务代码类中编写一个与调用微服务方法同参的 fallback 方法然后使用  @HystrixCommand(fallbackMethod = "getUserDefault")  来指定,如果这种方法多了,那么业务代码就被污染了。

9.完

原文地址:https://www.cnblogs.com/coding-one/p/12300446.html

时间: 2024-11-10 03:37:36

Spring Cloud 学习——5.使用 feign 的 hystrix 支持的相关文章

Spring Cloud 学习——6.zuul实现路由、负载均衡、安全验证

1.前言 在一个大微服务架构的系统中,可能存在着很多服务,如果将这些服务全部对外暴露,会带来很多问题.比如安全问题,有些核心服务直接对外暴露很容易被攻击:比如身份验证问题,有些接口服务是要求登录的,如果各种服务各自对外暴露,那么这些要求登录的请求第一个触达的服务模块都要向“用户服务模块”查询鉴权结果,这样既对“用户服务模块”造成额外压力,也增加了这些其它服务模块的开发成本,所以应该考虑将身份验证的事情交到网关模块中直接完成:比如运维难度和成本问题,如果每一种服务都各自对外暴露,那么整个系统就需要

spring cloud 学习(4) - hystrix 服务熔断处理

hystrix 是一个专用于服务熔断处理的开源项目,当依赖的服务方出现故障不可用时,hystrix有一个所谓的断路器,一但打开,就会直接拦截掉对故障服务的调用,从而防止故障进一步扩大(类似中电路中的跳闸,保护家用电器). 使用步骤:(仍然在之前的示例代码上加以改造) 一.添加hystrix依赖 compile 'org.springframework.cloud:spring-cloud-starter-hystrix' 二.在需要熔断的方法上添加注解 package com.cnblogs.y

Spring Cloud学习--配置中心(Config)

Spring Cloud学习--配置中心(Config) 一 Spring Cloud Config简介 二 编写 Config Server 三 编写Config Client 四 使用refresh端点手动刷新配置 五 Spring Config Server与Eurelka配合使用 六 Config Server的高可用 一. Spring Cloud Config简介 微服务要实现集中管理微服务配置.不同环境不同配置.运行期间也可动态调整.配置修改后可以自动更新的需求,Spring Cl

0503-Hystrix保护应用-feign的hystrix支持

一.概述 1.1.基础[示例一] 如果Hystrix在类路径上并且feign.hystrix.enabled = true,Feign将用断路器包装所有方法.还可以返回com.netflix.hystrix.HystrixCommand.这可让您使用响应模式(调用.toObservable()或.observe()或异步使用(调用.queue()). 要以每个客户端为基础禁用Hystrix支持,请创建一个具有“prototype”范围. 在Spring Cloud Dalston发布之前,如果H

spring Cloud中,解决Feign/Ribbon整合Hystrix第一次请求失败的问题?

Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢? 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码.而首次请求往往会比较慢(因为Spring的懒加载机制,要实例化一些类),这个响应时间可能就大于1秒了.知道原因后,我们来总结一下解决方法.解决方案有三种,以feign为例. 方法一 1 hystrix.command.default.execution.iso

Spring Cloud 学习 (四) Hystrix &amp; Hystrix Dashboard &amp; Turbine

在复杂的分布式系统中,可能有几十个服务相互依赖,这些服务由于某些原因,例如机房的不可靠性.网络服务商的不可靠性等,导致某个服务不可用 . 如果系统不隔离该不可用的服务,可能会导致整个系统不可用.Hystrix 提供了熔断器功能,能够阻止分布式系统中出现联动故障.Hystrix 是通过隔离服务的访问点阻止联动故障的,并提供了故障的解决方案,从而提高了整个分布式系统的弹性. 使用 Hystrix 在 Ribbon 使用 Hystrix 添加依赖包 <dependency> <groupId&

Spring Cloud 学习——4.netfix hystrix 实现断路器

1.前言 在一个微服务系统中,不同服务之间相互调用,可能形成一些调用链.那么当下游的的某一个服务故障时,可能会导致级联故障(即导致直接或者间接调用该服务的所有上游服务都不可用).为了解决这种问题,就需要引入断路器.断路器的作用是:在调用服务的方法中声明一个断路节点,当本次调用服务失败时,根据节点声明的处理方式进行处理,避免抛出异常. spring cloud 提供了四种断路器实现:Netflix Hystrix. Resilience4J.Sentinel.Spring Retry .本文实现

spring cloud 学习(3) - feign入门

feign 是一个让rest服务调用更简洁的开源项目,很多介绍文章或书也称它为声明式REST调用.传统的web service中,通过引用wsdl来自动生成一些client的代理类(或stub代码),feign跟这个有点类似,但是更灵活. 先回顾一下,上节中service-consumer对服务的调用代码: 1 @GetMapping("/order/{userId}/{orderNo}") 2 public String findOrder(@PathVariable Integer

spring cloud学习--Feign

Feign简介: Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便.它具有可插拔注释支持,包括Feign注解和JAX-RS注解.Feign还支持可插拔编码器和解码器.Spring Cloud增加了对Spring MVC注释的支持,并HttpMessageConverters在Spring Web中使用了默认使用的相同方式.Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载平衡的http客户端.Fegin对Robbin进