Springcloud-Hystrix--熔断机制

 

 

Hystrix ?

服务降级

服务熔断

 

熔断机制:

对应雪崩效应的一种链路保护机制,当扇出链路的某个服务不可用或者响应时间过长时,会进行服务的降级,进而熔断该结点微服务的调用,快速返回错误的响应信息。

spring cloud 使用hystrix实现,5s内20次调用失败启动熔断---

@HystrixCommand

 

Hystrix实现简单熔断

在服务提供者中增加熔断,之前已经写了服务提供的微服务。

1,引入hystrix支持

<!--        服务熔断&#45;&#45;hystrix-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>

2,配置文件  instance id改一下
 

controller 修改

package com.wang.springcloud.controller;


import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.wang.springcloud.pojo.Dept;
import com.wang.springcloud.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController

public class DeptController {

    @Autowired
    private DeptService deptService;

    //为了测试熔断机制,此方法启动熔断,异常之后转到queryByIdHystrix处理
    @HystrixCommand(fallbackMethod = "queryByIdHystrix")
    @GetMapping("/dept/get/{id}")
    public Dept queryById(@PathVariable("id") int id){
        Dept dept =deptService.queryById(id);
        if(dept==null){
            throw new RuntimeException("没有找到部门,请检查");
        }
        return dept;
    }

    ///熔断发生时执行
    public Dept queryByIdHystrix(@PathVariable("id") int id){
        return new Dept()
                .setDeptno(id)
                .setDname("不好意思,没有该部门")
                .setDb_source("没有部门数据库信息");

    }
    @PostMapping("/dept/add")
    public  boolean addDept(Dept dept){
        return deptService.addDept(dept);
    }
    @GetMapping("/dept/list")
    public List<Dept> queryAll(){
        return deptService.queryAll();
    }

}

开启服务熔断

@HystrixCommand

package com.wang.springcloud;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient  //自动注册服务到eureka服务器
@EnableDiscoveryClient ///服务发现
@EnableCircuitBreaker ///添加熔断支持
public class DeptProvider {

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

注册服务测试

没有改部门时,熔断发生:

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值