0
点赞
收藏
分享

微信扫一扫

SpringCloud - Hystrix(一)



Hystrix 触发降级

1. 引入POM依赖 spring-cloud-starter-hystrix

2. 在OrderApplication,加注解@EnableCircuitBreaker

3. 在HystrixController添加注解@HystrixCommand(fallbackMethod="fallback"),这个fallback指方法,方法可以返回“太拥挤了,请稍后重试。”如果并发数太高或数据库连接数太多,也可以直接手动抛出异常也能达成一样的服务降级效果


Order 微服务项目

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
package com.imooc.order;

import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.feign.EnableFeignClients;

@EnableFeignClients(basePackages = "com.imooc.product.client")
//@SpringBootApplication
//@EnableDiscoveryClient
//@EnableCircuitBreaker
@SpringCloudApplication
public class OrderApplication {

public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
  • @SpringCloudApplication(看源码发现也包括了@EnableCircuitBreaker、@SpringBootApplication、@EnableDiscoveryClient等注解)
package com.imooc.order.controller;

import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.Arrays;

@RestController
public class HystrixController {

@HystrixCommand(fallbackMethod = "fallback")
@GetMapping("/getProductInfoList")
public String getProductInfoList() {
// product 微服务并未启动
RestTemplate restTemplate = new RestTemplate();
return restTemplate.postForObject("http://127.0.0.1:8005/product/listForOrder",
Arrays.asList("157875196366160022"),
String.class);


// 降级不一定用在调用目标服务失败,也可能用于当前服务降级;即:并发数如果太高我们自己手动抛出异常,那么它也会进入服务降级的方法中去
// throw new RuntimeException("发送异常了");
}

private String fallback() {
return "太拥挤了, 请稍后再试~~";
}
}


举报

相关推荐

0 条评论