springcloud之服务熔断机制 -- hystrix

swqww## 服务熔断和降级
1. 服务雪崩
在多个服务调用时 如 a调用b2调用c3 服务之间 出现一个问题(超时 或者不可用)就会导致服务通信返回异常 导致后面的信息 全盘崩盘 导致全部雪崩
我们要实现弃车报帅 我们要做出备份 容灾
2. hystrix
在多个服务出现崩盘时 能够保证 不会出现多米诺效应导致 服务与服务之间层层崩盘
向调用放返回一个 备选响应

3. 能做什么
服务熔断
服务降级
4. 服务熔断是什么
针对服务雪崩的一种链路保护机制 从而熔断 返回备选响应

5. 设置选择备选项

  1. 注解为 @HystrixCommand(fallbackMethod = “hystryixCes” ) 在当前法方法上面添加 在服务失败时 会自动调用fallbackMethod = " " 选择的方法
  2. 在主启动类上添加@Enable注解
    @EnableCircuitBreaker
    小贴士(在yml中配置 如下信息 能在 点击服务时 查看该eureka 的真实 ip)
  eureka:
    prefer-ip-address: true

服务降级

  1. 服务降级是跟客户端相关的 服务熔断和降级的区别是 一个是实现错误回调方法 一个是继承接口 实现返回一个类
  2. 继承接口 实现接口 方法
@Component
public class EmployeeFeignHystrixService implements FallbackFactory {
    @Override
    public Object create(Throwable throwable) {
        return new EmployeeFeignService() {
            @Override
            public Object get(int id) {
                return "当前服务出现问题 暂时关闭 敬请期待再次开启";  //返回结果是当前访问失败后产生的结果 不要用null
            }
        };
    }
}
  1. 然后在 api model 接口处开启服务降级
@FeignClient(value = "EUREKA", fallbackFactory = EmployeeFeignHystrixService.class)
  1. 然后在客户端开启服务
feign:
  hystrix:
    enabled: true
  1. 区别 服务融断是在服务端方法超时~错误 服务降级是在客户端 为了更好的调用资源
  2. 在服务降级后 如果中途关闭其中的一个服务 在 访问该服务时就会返回我们当时继承接口方法时 return 的值

监控

  1. 创建监控model
  2. 导入依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
  1. 开启服务
    @enableHystrixDashboard //开启监控
  2. 要保证每个服务里面都有监控信息的maven的导入 和启动项中有这个@Bean导入
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        
 @Bean
    public ServletRegistrationBean hystrixMetricsStreamServlet() {
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
        registrationBean.addUrlMappings("/actuator/hystrix.stream");
        return registrationBean;
    }
  1. 解析
    在这里插入图片描述

  2. 监控可视化 就是方便

  3. 导入zuul

  4. 能干什么
    隐藏服务信息 关闭过滤掉直接去往服务器的请求实现统一管理

    现在的过程变成 请求------》 zuul----》负载均衡-----》真实服务
    10.开启步骤

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
zuul:
  routes:
    myemp.serviceId: eureka      #将这个路径访问变成新的样子
    myemp.path: /user/**
  host:
      connect-timeout-millis: 15000 #HTTP连接超时大于Hystrix的超时时间
      socket-timeout-millis: 60000   #socket超时
  ignore-services: "*" #过滤该路径访问的请求
  prefix: /user  #带该请求头的才能访问
ribbon:        #设置ribbon的超时时间小于zuul的超时时间
    ReadTimeout: 10000
    ConnectTimeout: 10000
@EnableZuulProxy // 开启Zuul网关
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值