zoukankan      html  css  js  c++  java
  • Ribbon使用Hystrix

    1、导入依赖spring-cloud-starter-hystrix

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix</artifactId>
    </dependency>

     

    2、消费启动类开启@EnableCircuitBreaker

    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.client.loadbalancer.LoadBalanced;
    import org.springframework.cloud.netflix.ribbon.RibbonClient;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    //开启Ribbon
    @RibbonClient(name="cloud-producer")
    //启动断路器支持(Hystrix)
    @EnableCircuitBreaker
    public class RibbonConsumerApplication {
    
        @Bean
        @LoadBalanced //负载均衡
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
        public static void main(String[] args) {
            SpringApplication.run(RibbonConsumerApplication.class, args);
        }
        
    }

     

    3、TestService——设置断路器核心类

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;
    import org.springframework.web.client.RestTemplate;
    
    import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
    
    @Repository
    public class TestService {
        
        @Autowired
        private RestTemplate restTemplate;
        
        //设置断路器,当此方法无法应答时(把mima-cloud-producer服务停掉),调用getError方法
        @HystrixCommand(fallbackMethod="getError")
        public String get(String id) {
            System.out.println(Thread.currentThread().getName()+".get before...");
            String result = restTemplate.getForObject("http://cloud-producer/get/"+id, String.class);
            System.out.println(Thread.currentThread().getName()+".get end...result="+result);
            return result;
        }
        
        public String getError(String id) {
            System.out.println(Thread.currentThread().getName()+"断路器启动");
            return "断路器fallback返回error";
        }
    }

     

    4、TestController——测试类

    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.RestController;
    
    import com.mimaxueyuan.consumer.robbin.service.TestService;
    
    @RestController
    public class TestController {
    
        @Autowired
        private TestService testService;
    
        @GetMapping("/ribbon/get/{id}")
        public String get(@PathVariable String id) {
            return testService.get(id);
        }
    }

     

    以上代码在cloud-consumer-ribbon-hystrix服务中,模拟远程调用cloud-producer服务。

    5、模拟测试
    5.1、启动服务
    启动cloud-consumer-ribbon-hystrix、cloud-producer服务,保证服务正常。

    5.2、正常请求

    5.3、服务挂掉请求,触发断路器
    把cloud-producer服务关闭,这时http://localhost:8807/ribbon/get/123456请求无法应答,会调用getError方法,触发断路器

    5.4、多次请求控制台会打印如下信息:

  • 相关阅读:
    400多个开源项目以及43个优秀的Swift开源项目-Swift编程语言资料大合集
    iOS开发-OC分支结构
    iOS开发-OC数据类型
    const volatile同时限定一个类型int a = 10
    详细解说Tomcat 设置虚拟路径的几种方法及为什么设置虚拟路径
    MySQL5.7数据库的基本操作命令
    CentOS7下搭建LAMP+FreeRadius+Daloradius Web管理
    Python安装第三方库的两种方式
    如何更换CentOS6的yum源
    CentOS6.5下搭建LAMP+FreeRadius+Daloradius Web管理和TP-LINK路由器、H3C交换机连接,实现,上网认证和记账功能
  • 原文地址:https://www.cnblogs.com/linjiqin/p/10195329.html
Copyright © 2011-2022 走看看