服务熔断和服务降级

服务之间是可以相互调用的,如果底层的服务出现了问题,那么他的上层服务也就会出问题

为了解决分布式系统的雪崩问题,SpringCloud提供了Hystrix熔断器组件

服务降级

服务降级并不会直接返回错误,而是提供一个补救措施,正常响应给请求者。这样相当于服务依然可用,但是降低了服务能力

导入Hystrix的依赖

   
        org.springframework.cloud
        spring-cloud-starter-netflix-hystrix
             2.2.10.RELEASE
   

 在启动类添加注解开启

@SpringBootApplication
@EnableHystrix   //启用Hystrix
public class BorrowApplication {
    public static void main(String[] args) {
        SpringApplication.run(BorrowApplication.class, args);
    }
}

当下层的服务出现问题,就会调用备选的方案

@RestController
public class BorrowController {

    @Resource
    BorrowService service;

    @HystrixCommand(fallbackMethod = "onError")    //使用@HystrixCommand来指定备选方案
    @RequestMapping("/borrow/{uid}")
    UserBorrowDetail findUserBorrows(@PathVariable("uid") int uid){
        return service.getUserBorrowDetailByUid(uid);
    }
		
  	//备选方案,这里直接返回空列表了
  	//注意参数和返回值要和上面的一致
    UserBorrowDetail onError(int uid){
        return new UserBorrowDetail(null, Collections.emptyList());
    }
}

服务降级是一种比较温柔的解决方案,虽然服务本身不可用,但是能够保证正常响应数据。

服务熔断

熔断机制是应对雪崩效应的一种微服务链路保护机制,当检测出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回”备选方案”的响应信息。当检测到该节点微服务响应正常后恢复调用链路。

熔断就是在降级的基础上进一步升级形成的,也就是说,在一段时间内多次调用失败,那么就直接升级为熔断

它能够对一段时间内出现的错误进行侦测,当侦测到出错次数过多时,熔断器会打开,所有的请求会直接响应备选方案,一段时间后,执行一定数量的请求,如果还是出现错误,那么则继续保持打开状态,否则说明服务恢复正常运行,关闭熔断器。

监控页面部署

创建一个新的项目,并导入依赖


    org.springframework.cloud
    spring-cloud-starter-netflix-hystrix-dashboard
    2.2.10.RELEASE

修改配置文件

server:
  port: 8900
hystrix:
  dashboard:
    # 将localhost添加到白名单,默认是不允许的
    proxy-stream-allow-list: "localhost"

添加@EnableHystrixDashboard注解开启管理页面

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

启动Hystrix管理页面服务,然后需要在要进行被监控的服务中添加Actuator依赖

Actuator是SpringBoot程序的监控系统,可以实现健康检查,记录信息等


    org.springframework.boot
    spring-boot-starter-actuator

在配置文件中配置Actuator添加暴露

management:
  endpoints:
    web:
      exposure:
        include: '*'

打开刚刚启动的管理页面,地址为:http://localhost:8900/hystrix/

在中间填写要监控的服务的地址:比如:http://localhost:8282/actuator/hystrix.stream,注意后面要添加/actuator/hystrix.stream,然后点击Monitor Stream即可进入监控页面

服务熔断和服务降级_第1张图片

可以看到现在都是Loading状态,这是因为还没有开始统计,尝试调用几次被监控的服务,就开始出现信息了,

当Circuit更改为Open状态是,表示熔断开启

你可能感兴趣的:(java,分布式,spring,boot)