SpringCloud:Fegin结合Hystrix熔断器实战(八)

SpringCloud整合断路器的使用,用户服务异常等情况

!!所有不明白的看之前代码看前几章实战

部分一

一:加入依赖

网上新旧版本问题,所以要以官网为主,不然部分注解丢失

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
二:启动类添加注解
@SpringBootApplication
@EnableFeignClients
@EnableCircuitBreaker
public class OrderServiceApplication {

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

补充:注解越来越多 可以用@SpringCloudApplication注解 里面包含了这些注解
在这里插入图片描述

三:API接口编码

注意!方法签名一定要和api方法一致,不然会报错

在原有接口功能上稍微做更改,之前代码没变,不知道看前几章实战

@RestController
@RequestMapping("/api/v1/order")
public class OrderController {

    @Autowired
    private ProductOrderService productOrderService;

    @RequestMapping("save")
    @HystrixCommand(fallbackMethod = "saveObjectFail")
    public Object save(@RequestParam("user_id")int userId,@RequestParam("product_id")int productId){


        Map<String ,Object> data = new HashMap<>();
        data.put("code",0);
        data.put("data",productOrderService.save(userId,productId));
        return data;
    }

    //注意,方法签名一定要和api方法一致,不然会报错
    private Object saveObjectFail(int userId,int productId){
    
    //这里可以模拟一个兜底数据
        Map<String ,Object> msg = new HashMap<>();
        //前端拿到code为0时表正常,-1为接口不正常
        msg.put("code",-1);
        msg.put("msg","抢购人数太多,您被挤出来了,请稍后重试");
        return msg;

    }
}
四:测试

启动eureka》启动商品服务》启动订单服务》正常访问返回订单数据–此时订单服务宕机挂掉了(这里的操作直接停掉商品服务就可以了)–重新访问订单服务接口即返回熔断方法
在这里插入图片描述

部分二

Fegin也是整合了hystrix

使用FeginClient接口里fallback方法

1.开启feign(注意一定要开启,旧版本默认支持,新版本关闭)

feign:
  hystrix:
    enabled: true

2.编写异常类 需要继承当前的回报错误的类

/**
 * 针对商品服务,进行降级处理
 */
@Component
public class ProductClientFallback implements ProductClient {
    @Override
    public String findById(int id) {
        System.out.println("fegin调用product-service findbyid异常");
        return null;
    }
}

3.正常接口

/**
 * 商品服务客户端
 */
@FeignClient(name ="product-service",fallback = ProductClientFallback.class)//调用服务名称
public interface ProductClient {

    @GetMapping("/api/v1/product/find")
    String findById(@RequestParam(value = "id")int id);

}

为什么这样写:标记成FeignClient,自定义一个异常类,自定义一个接口,让spring去扫描

测试流程和上面一样
在这里插入图片描述

在这里插入图片描述

整体流程就是先进入调取服务接口,发现接口出现出现异常,返回到异常类,异常返回空,返回到控制层fallbackMethod方法给前端

测试问题

重新启动商品服务后,测试订单接口调取商品服务后发现还是提示异常。这是服务注册会发送自己的网络信息,告诉我有哪些信息,订单去注册中心定期去拿,过一段时间就可以调取到了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值