热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ribbon使用Hystrix

1、导入依赖spring-cloud-starter-hystrixorg.springframework.cloud

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

org.springframework.cloudspring-cloud-starter-hystrix

 

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 {@Autowiredprivate 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 {@Autowiredprivate 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、多次请求控制台会打印如下信息:

转:https://www.cnblogs.com/linjiqin/p/10195329.html



推荐阅读
author-avatar
闹闹依旧不闹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有