SpringCloud Hystrix 实现

本文介绍如何在 Spring Cloud 应用中使用 Hystrix 实现断路器模式,包括配置默认超时时间、基于 Feign 和 Ribbon 的断路器实现、熔断方法的指定及 Hystrix 的开启与关闭等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于方法的融断

更多干货

pom.xml引入相应的依赖

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-hystrix</artifactId>
		</dependency>

配置hystrix 默认超时时间

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000

应用入口

应用入口 引入@EnableCircuitBreaker 熔断器注解

@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
public class ConsumerMovieRibbonApplication {

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

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

基于Feign的融断

UserFeignClient

@FeignClient(name = "microservice-provider-user", fallback = HystrixClientFallback.class)
public interface UserFeignClient {
  @RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)
  public User findById(@PathVariable("id") Long id);
}

HystrixClientFallback

@Component
public class HystrixClientFallback implements UserFeignClient {

  @Override
  public User findById(Long id) {
    User user = new User();
    user.setId(0L);
    return user;
  }
}

controller 中实现融短方法

@HystrixCommand 指定融断方法 注意熔断器的方法一定和原方法的名称保持一致 配置@HystrixCommand(fallbackMethod = "findByIdFallback", commandProperties = @HystrixProperty(name = "execution.isolation.strategy", value = "SEMAPHORE"))

  • 配置完上面isolation的表示findById 与 findByIdFallback 在同一线程。不配置表示默认两个方法在不同的线程,其中findByIdFallback在隔离线程。
@RestController
public class MovieController {
  @Autowired
  private RestTemplate restTemplate;

  @GetMapping("/movie/{id}")
  @HystrixCommand(fallbackMethod = "findByIdFallback")
  public User findById(@PathVariable Long id) {
    return this.restTemplate.getForObject("http://microservice-provider-user/simple/" + id, User.class);
  }

  public User findByIdFallback(Long id) {
    User user = new User();
    user.setId(0L);
    return user;
  }
}

Feign 关闭Hystrix

局部关闭Hystrix支持

  • Feign 默认支持Hystrix。Feign.Builder: HystrixFeign.Builder
  • 关闭Hystrix的支持只需要修改feignBuilder配置如下:
  @Bean
  @Scope("prototype")
  public Feign.Builder feignBuilder() {
    return Feign.builder();
  }

全局关闭Hystrix支持

  • feign.hystrix.enabled = false

采用FallbackFactory 实现熔断

为FeignClient 配置HystrixClientFactory

@FeignClient(name = "microservice-provider-user", fallbackFactory = HystrixClientFactory.class)
public interface UserFeignClient {
  @RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)
  public User findById(@PathVariable("id") Long id);
}

HystrixClientFactory

@Component
public class HystrixClientFactory implements FallbackFactory<UserFeignClient> {

  private static final Logger LOGGER = LoggerFactory.getLogger(HystrixClientFactory.class);

  @Override
  public UserFeignClient create(Throwable cause) {
    HystrixClientFactory.LOGGER.info("fallback; reason was: {}", cause.getMessage());
    return new UserFeignClientWithFactory() {
      @Override
      public User findById(Long id) {
        User user = new User();
        user.setId(-1L);
        return user;
      }
    };
  }
}

UserFeignClientWithFactory 实现了 UserFeignClient接口

public interface UserFeignClientWithFactory extends UserFeignClient {

}

查看Hystrix状态

http://localhost:8010/hystrix.stream 查看Hystrix信息 http://localhost:8010/health 查看监控状态

Hystrix DashBoard

pom.xml

  • 引入对DashBoard的支持
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
		</dependency>

EnableHystrixDashboard 应用入口指定对HystrixDashboard的支持

@EnableHystrixDashboard
@SpringBootApplication
public class EurekaApplication {
  public static void main(String[] args) {
    SpringApplication.run(EurekaApplication.class, args);
  }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值