Spring cloud中使用 Hystrix 请求熔断服务降级

Spring cloud中使用 Hystrix

前言

Hystrix 在Spring Cloud中使用了Netflix开发的Hystrix来实现熔断器。可以稍微通过几个简单的代码示例,学习Hystrix

导入依赖

    <!-- 整合hystrix -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>

代码示例

开启熔断器

//开启熔断器
@EnableHystrix
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaclientApplication {

    /**
     * 实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.
     * @return restTemplate
     */
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

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

}


业务实例代码

这里请求服务代码就不写了 可以查看 传送门

容错代码

@Service
public class UserService {

    @Autowired
    RestTemplate restTemplate;

    //服务发现对象
    @Autowired
    DiscoveryClient discoveryClient;

    @HystrixCommand(fallbackMethod = "fallback")
    public User getUser(int id){

        //user微服务的名字 用来想此服务发送请求
        String  servceId = "user-server";

        String url = "http://" + servceId  + "/getUser?id=" + id;
        System.out.println(url +  " =  " +  url);
        User forObject = restTemplate.getForObject(url, User.class);

        return forObject;
    }

    /**
     * 使用@HystrixCommand注解指定当该方法发生异常时调用的方法
     * @param id id
     * @return 通过id查询到的用户
     */
    public User fallback(int id) {
        return new User(1,"test 用户 ","查询用户异常!","1");
    }

}

controller 调用

@RestController
public class GetUserController {


    @Autowired
    private UserService userService;

    @RequestMapping("get")
    public User getUser(int id){


        return userService.getUser(id);
    }
}


实体类User

public class User {

    private int id;
    private String name;
    private String sex;
    private String count;

    public User() {
    }

    public User(int id, String name, String sex, String count) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.count = count;
    }


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getCount() {
        return count;
    }

    public void setCount(String count) {
        this.count = count;
    }
}


可以看到异常容错

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章