本文共 3507 字,大约阅读时间需要 11 分钟。
在分布式系统当中,服务之间调用关系会随着业务的发展而变的复杂,一个服务可能依赖多个服务,服务之间层层依赖;一个服务的瘫痪可能导致整个系统的崩溃。
与电闸思想类似:每栋房子,每户都安装了电闸,电闸的作用是保证有一家电路出现短路时,电闸进行断电跳闸的操作,这样不至于导致整栋楼用电瘫痪。
4.0.0 com.cntaiping.tpa hystrix 0.0.1-SNAPSHOT jar hystrix Demo project for Spring Boot com.cntaiping.tpa cloud 1.0-SNAPSHOT org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-netflix-ribbon org.springframework.cloud spring-cloud-starter-netflix-hystrix
#服务名称spring.application.name=consumer-hystrix#端口号server.port=8505#在注册中心中进行注册eureka.client.serviceUrl.defaultZone=http://localhost:8800/eureka/
package com.cntaiping.tpa.hystrix;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.cloud.netflix.hystrix.EnableHystrix;import org.springframework.context.annotation.Bean;import org.springframework.web.client.RestTemplate;@SpringBootApplication@EnableHystrixpublic class HystrixApplication { public static void main(String[] args) { SpringApplication.run(HystrixApplication.class, args); } @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); }}
在hello方法上加上@HystrixCommand注解。该注解对该方法创建了熔断器的功能,并指定了fallbackMethod熔断方法,熔断方法直接返回了一个字符串
package com.cntaiping.tpa.hystrix.service;import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.web.client.RestTemplate;@Servicepublic class HelloService { @Autowired RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "error") public String hello(String name) { return restTemplate.getForObject("http://producer/get?name="+name, String.class); } public String error(String name) { return "hi,"+name+",sorry,error!"; }}
package com.cntaiping.tpa.hystrix.controller;import com.cntaiping.tpa.hystrix.service.HelloService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloController { @Autowired HelloService helloService; @GetMapping(value = "/hello") public String hello(@RequestParam String name) { return helloService.hello( name ); }}
(1)注册中心
将服务提供方producer的两个实例进程(8700和8701)关闭,再次运行http://localhost:8505/hello?name=chengyq
hi,chengyq,sorry,error!
转载地址:http://ggvab.baihongyu.com/