微服务和VUE入门教程(24): 微服务之断路器

  • Post author:
  • Post category:vue




微服务和VUE入门教程(24): 微服务之断路器


微服务和VUE入门教程(0): 着手搭建项目



微服务和VUE入门教程(1): 搭建前端登录界面



微服务和VUE入门教程(2): 注册中心



微服务和VUE入门教程(3): user微服务的搭建



微服务和VUE入门教程(4):网关zuul的搭建



微服务和VUE入门教程(5): 前后端交互



微服务和VUE入门教程(6):连接数据库-mybatis



微服务和VUE入门教程(7):配置中心-config



微服务和VUE入门教程(8):前端主页的编写



微服务和VUE入门教程(9): token验证-token后端生成以及前端获取



微服务和VUE入门教程(10): token验证-前端登录拦截以及token过期提醒



微服务和VUE入门教程(11): mybatis 动态查询



微服务和VUE入门教程(12):前端提示搜索框的实现



微服务和VUE入门教程(13): token验证-zuul拦截与验证



微服务和VUE入门教程(14): 热部署



微服务和VUE入门教程(15): 课堂小知识



微服务和VUE入门教程(16): zuul 熔断



微服务和VUE入门教程(17): VUE 响应拦截器



微服务和VUE入门教程(18): 前端接口模块化



微服务和VUE入门教程(19): VUE组件化–子组件向父组件通信



微服务和VUE入门教程(20): VUE组件化–父组件向子组件通信



微服务和VUE入门教程(21): springboot中定时器-Schedule



微服务和VUE入门教程(22): 页面长时间未操作自动退出登录



微服务和VUE入门教程(23): 微服务之间的调用



微服务和VUE入门教程(24): 微服务之断路器



微服务和VUE入门教程(25): 微服务之Hystrix-dashboard



微服务和VUE入门教程(26): 微服务之turbine



微服务和VUE入门教程(27):VUE前端工程打包



1. 前言

微服务拥有完整的额熔断机制,比如限流,隔离,熔断等。具体详细信息还需要自己去查找资料研究一下。当我们的某个微服务中的某个接口出现错误后,这个微服务不会挂掉,而是以一种“优雅”的方式返回给用户回应。



2. 断路器的作用

首先,由于断路器允许开发人员处理服务故障,客户端可以以一种优雅的方式随时间动态地适应服务可用性的变化。

其次,在微服务架构中共享状态的断路器提供了网络效果,可以显著提高故障响应能力。

第三,断路器与智能路由和负载均衡相结合,可以自动用健康的服务实例替换故障的服务实例,从而促进自修复。



3. 代码的编写



3.1 加入依赖,修改父pom文件

熔断有两种依赖,一个是专业的熔断器:hystrix。一个是我们用于微服务之间通信的openfeign。其中openfeign已经包含了hystrix。但是为了学习熔断,我们还是使用hystrix。

<!--熔断-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>

我们在my-user和my-student的微服务中都加入这个依赖。



3.2 加入注解StuApplication.java

以my-student微服务为例

修改StuApplication.java,加入注解

@EnableCircuitBreaker



3.3 修改配置文件my-student-dev.yml

# 开启熔断
feign:
  hystrix:
    enable: true



3.4 加入断路器函数

//学生查询
@RequestMapping(value = "/get", method = RequestMethod.POST)
@HystrixCommand(fallbackMethod = "postFallBack", commandProperties = {
        @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "5000")
})
public JSONObject getStudent(@RequestBody JSONObject jsonObject){
 ...
 ...
}
/**
 * 获取学生姓名和学号
 * */
@RequestMapping(value = "/stu_name/&/stu_no/get", method = RequestMethod.GET)
@HystrixCommand(fallbackMethod = "getFallBack", commandProperties = {
        @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "5000")
})
public JSONObject getStuNameAndNo(){
...
...
}

可见我们在接口函数上面分别加入了熔断器

@HystrixCommand(fallbackMethod = "postFallBack", commandProperties = {
        @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "5000")
})

这段话的意思是指:若下面函数(getStudent)出现错误的时候,熔断器便自动会去执行postFallBack这个方法。commandProperties={…}:服务降级的一些设置,当调用函数等待超过5s,就会自动发生服务降级,去执行postFallBack。

其他函数也是加入如上两个断路器设置。



3.5 熔断函数

/**
 * 熔断函数
 * */
public JSONObject getFallBack(){
    JSONObject result = new JSONObject();
    result.put("state",201);
    return result;
}

public JSONObject postFallBack(JSONObject jsonObject){
    JSONObject result = new JSONObject();
    result.put("state",201);
    return result;
}

设计期望:当发生熔断后,返回前端代码201。



4. 总结

熔断有很多策略,会设计到很多知识,这里展示的只是一个最简单的应用。还没想到如何测试熔断,所以先写上再说。



版权声明:本文为weixin_42754905原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。