022 断路器Hystrix
发布日期:2021-08-22 19:57:35 浏览次数:60 分类:技术文章

本文共 3917 字,大约阅读时间需要 13 分钟。

hot3.png

1 说明

     这一篇写了通过ribbon、feign、http方式实现微服务通信,这一篇断路器基于上篇

2 整合Hystrix

    pom依赖:

org.springframework.cloud
spring-cloud-starter-hystrix

    启动类添加 @EnableHystrix 注解

@SpringBootApplication@EnableDiscoveryClient@EnableFeignClients@EnableHystrixpublic class SalesApplication {        @Bean    @LoadBalanced    RestTemplate restTemplate() {    	return new RestTemplate();    }    public static void main(String[] args) {        SpringApplication.run(SalesApplication.class,args);    }}

    接口如下,为了演示不同熔断方式,这里有两个 Feign 方式接口

@RequestMapping("/sales")public interface SalesRest {    @RequestMapping(value = "/queryGoodsListByRibbon", method = RequestMethod.GET)    Object queryGoodsListByRibbon();        @RequestMapping(value = "/queryGoodsListByFeign", method = RequestMethod.GET)    Object queryGoodsListByFeign();        @RequestMapping(value = "/queryGoodsListByFeign2", method = RequestMethod.GET)    Object queryGoodsListByFeign2();        @RequestMapping(value = "/queryGoodsListByHttp", method = RequestMethod.GET)    Object queryGoodsListByHttp();}

    通用方式熔断:在方法上添加 @HystrixCommand(fallbackMethod = "CommonFallback") ,指定目标方法调取不到后执行 CommonFallback() 熔断方法

@RestControllerpublic class SalesRestImpl implements SalesRest {    @Autowired    private SalesService salesService;    @Override    @HystrixCommand(fallbackMethod = "CommonFallback")    public String queryGoodsListByHttp() {    	return salesService.queryGoodsListByHttp();    }    @Override    @HystrixCommand(fallbackMethod = "CommonFallback")    public String queryGoodsListByRibbon() {    	return salesService.queryGoodsListByRibbon();    }    @Override    @HystrixCommand(fallbackMethod = "CommonFallback")    public String queryGoodsListByFeign() {    	return salesService.queryGoodsListByFeign();    }    @Override    public String queryGoodsListByFeign2() {    	return salesService.queryGoodsListByFeign();    }        public String CommonFallback() {    	return "CommonFallback";    }}

    具体方法调用:

@Servicepublic class SalesService {		@Autowired	RestTemplate restTemplate;		@Autowired	UserFeignClient userFeignClient;		private static final String RIBBON_URL = "http://user:8082/user/getUserInfo";	private static final String HTTP_URL = "http://127.0.0.1:8082/user/getUserInfo";	private static final String IP = IpUtil.getIp();	public String queryGoodsListByRibbon() {		String sales_result = "queryGoodsListByRibbon success : [sales_ip:" + IP + "] ";		String result = restTemplate.getForObject(RIBBON_URL, String.class);		return sales_result + result;	}	public String queryGoodsListByFeign() {		String sales_result = "queryGoodsListByFeign success : [sales_ip:" + IP + "] ";		String result = (String) userFeignClient.getUserInfo();		return sales_result + result;	}	public String queryGoodsListByHttp() {		String sales_result = "queryGoodsListByHttp success : [sales_ip:" + IP + "] ";		String result = HttpClientUtil.doGet(HTTP_URL);		return sales_result + result;	}}

    Feign 熔断:给 FeignClient 接口指定一个 fallback 实现类,然后该类实现 FeignClient 的接口,这样接口调不通时便会调用 fallback 实现类中的相应方法:

@FeignClient(name = "USER", fallback = UserFeignClientFallback.class)public interface UserFeignClient {	@RequestMapping(value = "/user/getUserInfo", method = RequestMethod.GET)	String getUserInfo();}

    UserFeignClientFallback.class

@Componentpublic class UserFeignClientFallback implements UserFeignClient {	@Override	public String getUserInfo() {		return "feign client fallback";	}}

3 运行结果

    启动 eureka 和 sales,不启动 user ,观察接口输出

http://127.0.0.1:8081/sales/queryGoodsListByRibbon --> CommonFallbackhttp://127.0.0.1:8081/sales/queryGoodsListByHttp--> CommonFallbackhttp://127.0.0.1:8081/sales/queryGoodsListByFeign--> CommonFallbackhttp://127.0.0.1:8081/sales/queryGoodsListByFeign2--> queryGoodsListByFeign success : [sales_ip:192.168.0.102] feign client fallback

4 代码

    core-simple:

    eureka:

    hystrix-sales:

    hystrix-user:

转载于:https://my.oschina.net/u/2937605/blog/1809901

转载地址:https://blog.csdn.net/weixin_33755554/article/details/92349172 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android实现XML解析技术
下一篇:android Theme使用总结

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月23日 17时17分17秒