SpringCloud中使用hystrix来做熔断
导入依赖
<dependency>
<groupId>org. springframework. cloud</ groupId>
<artifactId>spring- cloud- starter- netflix- hystrix</ artifactId>
<version>2. 2. 3. RELEASE</ version>
</ dependency>
application.yml文件中配置启动熔断器
feign:
hystrix:
enabled: true
在启动类上使用纾解标注启动hystrix
@SpringBootApplication
@EnableEurekaClient
@MapperScan( basePackages = { "com.neuedu.shop.mapper" } ) / / mybatis自动扫包位置
@EnableFeignClients
@EnableCircuitBreaker
public class OrderServiceApplication {
public static void main( String[ ] args) {
SpringApplication. run( OrderServiceApplication. class , args) ;
}
}
写一个类,这个类是给熔断器调用的,要求方法名与feign 中的方法名一致。要添加@Component注解
@Component
public class OrderHystrixClient implements OrderFeignClient{
@Override
public ProductInfo getProductById( Integer id) {
System. out. println( "熔断器执行" ) ;
/ / 会用redis的话, 可以抓取缓存
return ProductInfo. invalid( ) ;
}
@Override
public Integer updateProduct( ProductInfo productInfo) {
return - 1;
}
}
在feign接口的注解中使用属性标注替代类,记住加上fallback = OrderHystrixClient.class,如果调用服务失败则采用熔断机制
@FeignClient( value = "product-service" , fallback = OrderHystrixClient. class )
public interface OrderFeignClient {
/ / 以抽象方法的形式表示调用
/ / feign底层会自动转化对象类型
/ / 使用requestMapping注解来表示你要调用那个请求
@RequestMapping( value = "/shop-product/insideGetProductById" , method = RequestMethod. GET)
ProductInfo getProductById( @RequestParam( "id" ) Integer id) ;
@RequestMapping( value = "/shop-product/insideUpdateProduct" , method = RequestMethod. POST)
Integer updateProduct( @RequestBody ProductInfo productInfo) ;
}