Life

Tuesday, June 30, 2020

Spring Cloud(五):Hystrix

 在上一节的最后我提到Feign集成了Hystrix实现了容错功能。

这一节我们看下Hystrix有什么本事以及利用Feign实现Hystrix的这些功能。

Hystrix特性

  • 服务隔离机制 Hystrix是一个熔断器模型的具体实现,熔断器就类似于保险丝,单个电器故障使保险丝熔断以防止故障蔓延造成更大损失 容错机制就是这个原理
  • 服务降级机制 当服务提供者无法访问时不能让消费者一直等待或返回代码异常栈显得很不友好。这时返回fallback中定义的异常信息实现降级处理
  • 实时的监控与报警功能,可迅速发现服务中存在的故障。


基于Feign实现Hystrix

在上一节我们已经实现了Feign这样一个客户端,我们可以直接在此基础上实现Hystrix的熔断与降级机制

在consumer的配置文件添加配置


  feign: 
    hystrix: 
      enabled: 
        true #熔断器 

还需实现FeignClinet 接口创建降级回调类,返回降级信息

@Component
public class FeignHystrix implements FeignClinet {
    @Override
    public List<Instrument> getAllByFeign() {
       return null;
    }

    @Override
    public List<Actor> findAllByFeign() {
        List<Actor> list = new ArrayList<Actor>();
        Actor actor = new Actor();
        actor.setId(47L);
        actor.setGender("male");
        actor.setName("黑豹不死");
        list.add(actor);
        try {
            throw  new Exception("Sorry,the function is unreachable");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
}

并在FeignClinet @FeignClient 注解中声明fallback类:


    @FeignClient(value = "provider", configuration =FeignAutoConfiguration.class,
        fallback = FeignHystrix.class)

这样设置完成后,当正常的provider服务不可达时,熔断时调用降级信息


Dashboard可视化监控

    Hystrix提供了近乎实时的请求监测功能,这个功能结合Spring Boot Actuator 实现,可以看到Hystrix Command 的请求信息,当然它返回的是文本信息不够直观,我们可以再结合 Hystrix-dashboard 得到可视化的监控界面。
仍然利用上一节中的FeignClinet来实现Hystrix的功能特性
在pom文件中添加Hystrix、actuater、dashboard依赖

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

在启动类需要添加注解@EnableHystrix声明启用Hystrix;添加@EnableHystrixDashboard声明启用dashboard。依次启动eureka、provider、consumer后,将出现:

访问该地址将看到command的详细信息:
显然它十分的不友好,为了更直观的获得资讯,我们此时访问http://localhost:8020/hystrix输入监控地址http://localhost:8020/actuator/hystrix.stream点击开始监测:
这时我们可以得到较为直观清晰的监控界面,能获取到包括请求成功、熔断、失败、超时的数量等诸多信息。至于监控界面各参数具体信息请查阅hystrix-dashboard wiki


版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者Leslie Tien和本文原始地址:
https://leslietien.blogspot.com/2020/06/hystrix.html

Friday, June 26, 2020

Spring Cloud(四):服务网关

    在分布式项目架构中,会将服务进行拆分,各个微服务负责一部分业务功能,实现软件架构层面的解耦合。同时,为提高系统健壮性、可靠性,需进行容错,提高冗余,增设多个同样的微服务,当检测到某一服务失效后,启动备份服务保证系统的正常。
    但大数量的微服务并不利于系统开发,每个服务都有不同的网络地址,客户端在请求不同的微服务需要调用不同的URL,同时维护多个URL将增加开发的成本。
     为统一管理不同微服务的URL,增强系统的维护性,采用一种解决方案:API网关。使用API网关对所有的API请求进行管理维护,为系统开放一个统一的接口,所有的外部请求只需要访问这个统一的入口即可,系统内部通过API网关映射到不同的微服务。

Tuesday, June 16, 2020

浮点数加减法运算

设有两个浮点数x和y,它们分别为

其中ExEy分别维数x和y的阶码MxMy为数x和y的尾数.

两浮点数进行加法和减法的运算规则是:

Sunday, June 14, 2020

Spring Cloud(三):服务消费者

       在上一篇博文中创建了一个服务提供者provider,在注册中心完成注册,对外提供接口服务。此时应有一个服务消费者调用provider相关接口完成某些业务。而在实际环境中,各个微服务的IP地址不同,如何实现微服务之间的跨服务调用呢,我学习了两种方法:RestTemplate和Feign。

Tuesday, June 2, 2020

Spring Cloud(二):服务提供者

       在上一篇博文中实现了Eureka注册中心的搭建,在分布式系统架构中所有的微服务都需要在注册中心完成注册才能供服务发现功能发现并提供使用。而所谓的Service Provider和Service Consumer只是从业务功能角度来区分二者。事实上,他们都是以Eureka Client的身份注册在Eureka Server中的。
        我们可以通过Sping Boot快速搭建一个服务提供者,再将其作为Eureka Client注册到Eureka Server,对外提供服务。