SpringCloud 学习 | 第五篇: ribbon断路器使用(hystrix)

Hystrix

Hystrix是Netflix开源的一款容错框架,包含常用的容错方法:线程池隔离、信号量隔离、熔断、降级回退。在高并发访问下,系统所依赖的服务的稳定性对系统的影响非常大,依赖有很多不可控的因素,比如网络连接变慢,资源突然繁忙,暂时不可用,服务脱机等。我们要构建稳定、可靠的分布式系统,就必须要有这样一套容错方法。

创建springboot应用

pom.xml如下



	4.0.0

	com.example
	service_ribbon_hystrix
	0.0.1-SNAPSHOT
	jar

	service_ribbon_hystrix
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		2.0.0.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
		Finchley.M8
	

	
		
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-server
		
		
			org.springframework.cloud
			spring-cloud-starter-netflix-hystrix
		
		
			org.springframework.cloud
			spring-cloud-starter-netflix-ribbon
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	

	
		
			spring-milestones
			Spring Milestones
			https://repo.spring.io/milestone
			
				false
			
		
	


配置文件

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8760/eureka/
server:
  port: 8765

spring:
  application:
    name: service_ribbon_hystrix

在启动类上使用@EnableHystrix注解开启Hystrix

@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
public class ServiceRibbonHystrixApplication {

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

    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

在HiService上使用@HystrixCommand,该注解对该方法创建了熔断器的功能,并指定了fallbackMethod熔断方法 返回字符串

@Service
public class HiService {

    @Autowired
    private RestTemplate restTemplate;

    // http://服务提供者的serviceId/url
    @HystrixCommand(fallbackMethod = "error")
    public String hi(String name) {
        return restTemplate.getForObject("http://SUPPLY-HI/hi?name=" + name, String.class);
    }

    public String error(String name) {
        return "异常!";
    }
}

controller类

@RestController
public class HiController {

    @Autowired
    HiService hiService;


    @RequestMapping("/hi")
    public String hi(String name) {
        return hiService.hi(name);
    }

}

测试关闭一个服务提供者请求http://localhost:8765/hi?name=forezp


再次请求



你可能感兴趣的:(spring,cloud)