加入依赖(之前已经在3个服务都加过了)

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  4. </dependency>

开启Feign对Sentinel的支持

image.png

  1. //在订单服务中添加
  2. feign:
  3. sentinel:
  4. enabled: true

改造订单服务的OrderService接口

  1. //此接口的注解添加一个fallback参数并指定一个类
  2. @FeignClient(name="class-video-service", fallback = OrderServiceFallBack.class)
  3. public interface OrderService {
  4. //写上路径,自动会携带参数
  5. @GetMapping("/api/v1/video/find_by_id")
  6. Video findById(@RequestParam("videoId") int videoId);
  7. //插入 - 传递对象到视频服务
  8. @PostMapping("/api/v1/video/insert")
  9. void insert(@RequestBody Video video);
  10. }

新增OrderServiceFallBack.java

image.png

  1. import com.study.pojo.Video;
  2. import com.study.service.OrderService;
  3. import org.springframework.stereotype.Service;
  4. //实现OrderService接口
  5. @Service
  6. public class OrderServiceFallBack implements OrderService {
  7. //假设调用视频服务宕机,此处准备一个默认的视频返回
  8. @Override
  9. public Video findById(int videoId) {
  10. //准备兜底数据
  11. Video video = new Video();
  12. video.setTitle("熔断降级数据");
  13. return video;
  14. }
  15. @Override
  16. public void insert(Video video) {
  17. }
  18. }

启动测试

  1. 1.启动视频服务和订单服务,访问:
  2. http://localhost:8000/api/v1/video_order/save?video
  3. 2.将视频服务停止,访问:
  4. http://localhost:8000/api/v1/video_order/save?video

返回的是兜底数据,不会返回500错误
image.png