第一次用springcloud的@FeignClient熔断降级标签踩的坑

OrderAddClient.java
@FeignClient(value = "order-add",fallback = OrderAddClientFallBack.class)
public interface OrderAddClient {
    //对于post请求 默认发送body参数 一个方法只能有一个body参数
    @PostMapping("order/add")
    public ResultVO addOrder(Order order, @RequestParam("str")String str);
    //虽然这里是用get方法 但是如果没有加RequestParam,会人为orderId是以请求体的方式传参,get方法会被强转了post方法传参
    @GetMapping("order/get")
    public Order getOrder(@RequestParam("orderId") String  orderId);
}

OrderAddClientFallBack.java

@Component
public class OrderAddClientFallBack implements OrderAddClient {
    @Override
    public ResultVO addOrder(Order order, String str) {
        System.out.println("addorder的降级");
        return  ResultVO.success("addorder的降级",null);
    }

    @Override
    public Order getOrder(String orderId) {
        System.out.println("getorder的降级");
        return  new Order();
    }
}
@Service
public class OrderAddServiceImpl implements OrderAddService {
    @Autowired
    private OrderAddClient orderAddClient;
    @Override
    public ResultVO saveOrder(Order order) {
        ResultVO resultVO = orderAddClient.addOrder(order,"测试数据");
        Order id = orderAddClient.getOrder("测试id");
        return resultVO;
    }
}

引入依赖(这里其实应该放在前面的步骤才合理。即先引入依赖 才能用后面的各种标签)


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client


    org.springframework.cloud
    spring-cloud-starter-netflix-hystrix

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableHystrix  //启动类必须加的启动标签
public class ApiOrderAddApplication {

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

}

yml文件!!!重点就是这里了!!一开始一直用的旧版本的启动方式 导致一直报java.net.SocketTimeoutException: Read timed out

也没有其他资料记录了这个问题 真的花了整整一天时间踩的坑!!!!!

feign:
  circuitbreaker:
    enabled: true
# 注意:feign的fallback, ↑ 新版用这种方式开启。↓ 旧版用这个
#  hystrix:
#    enabled: true
feign:
  circuitbreaker:
    enabled: true
  client:
    config:
      default:
        ConnectTimeOut: 1000
        ReadTimeOut: 5000

//ConnectTimeOut 指的是建立连接所用的时间不能超过这个时间,否则熔断

//ReadTimeOut 指的是程序执行过程所用的时间不能超过这个时间,否则熔断

//可以用

try {
    Thread.sleep(3000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

的方式进行测试~

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 8000

你可能感兴趣的:(spring,cloud,java,spring)