spring cloud-hystrix

我们的家庭电路系统少不了保险丝。当电路发生故障或异常时,伴随着电流不断升高,并且升高的电流有可能损坏电路中的某些重要器件或贵重器件,也有可能烧毁电路甚至造成火灾。
若电路中正确地安置了保险丝,那么保险丝就会在电流异常升高到一定的高度和热度的时候,自身熔断切断电流,从而起到保护电路安全运行的作用。
本文我们讲解的spring cloud-hystrix组件,作用和保险丝差不多,官方解释:hystrix通过服务隔离、熔断(也可以称为断路)、降级等手段控制依赖服务的延迟与失败。
通过上述讲解我们可以得知,hystrix可以在依赖服务延迟或失败时,提供服务保护机制。下面我们通过java code讲解hystrix是如何做到的。
我们首先启动eureka服务,然后启动microservice-provider-user服务提供者实例,接着再启动microservice-consumer-movie服务消费者调用microservice-provider-user服务提供者服务。
如果microservice-provider-user服务提供者服务是正常的,调用microservice-consumer-movie服务消费者会正常返回数据。如果服务提供者服务出现故障了呢,尤其是在业务逻辑比较复杂的情况,A调用B,B调用C,C调用D。如果D出现故障,那A、B、C岂不是都不能正常运行了。
为了在我们的项目中加上hystrix组件,我们需要做以下配置:
1.在pom添加hystrix的依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

2.在微服务main方法的class加上@EnableCircuitBreaker注解:

@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
public class ConsumerMovieRibbonApplication {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(ConsumerMovieRibbonApplication.class, args);
    }
}

3.在Controller调用方法的method加上@HystrixCommand注解,声明依赖服务调用延迟或失败时调用的方法:

@RestController
public class MovieController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/movie/{id}")
    @HystrixCommand(fallbackMethod = "findByIdFailback")
    public User findById(@PathVariable Long id) {
        // http://localhost:7900/simple/
        // VIP virtual IP
        // HAProxy Heartbeat
        return this.restTemplate.getForObject("http://microservice-provider-user/simple/" + id, User.class);
    }

    public User findByIdFailback(Long id) {
        User user = new User();
        user.setId(0L);
        return user;
    }

}

完成上述配置后,再次启动microservice-consumer-movie服务消费者,如果microservice-consumer-user服务提供者正常运行,服务消费者返回正常数据;如果microservice-consumer-user服务提供者出现故障,服务消费者则调用findByIdFailback方法,返回UserId为0的数据。
另外,hystrix还提供了服务监控功能,运行http://localhost:8010/hystrix.stream(8010为服务消费者服务运行端口)可以监控microservice-consumer-movie服务消费者的接口调用状态,但返回的监控数据为json数据,不适合我们查看,因此需要我们搭建hystrix-dashboard服务,把json数据整理为图形化数据,因此需要我们做如下配置:
1.需要我们在pom添加hystrix-dashboard依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>

2.需要我们在main程序class添加@EnableHystrixDashboard注解:

@SpringBootApplication
@EnableHystrixDashboard
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

完成上述配置后,运行http://localhost:8030/hystrix,输入监控的stream和title,点击Monitor Stream,便会出现图形化的监控页面。
hystrix-dashboard
我们不断刷新http://localhost:8010/movie/1接口,图形化页面便会时时显示接口的各项监控参数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值