Openfeign

# Openfeign 远程接口调用 ##### 1)、引入依赖 ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` ##### 2)、在接口上面加注解@FeignClient("gulimall-seckill") ```java @FeignClient(value = "gulimall-seckill",fallback = SeckillFeignServiceFallBack.class) public interface SeckillFeignService { @GetMapping("/sku/seckill/{skuId}") R getSkuSeckillInfo(@PathVariable("skuId") Long skuId); } ``` ##### 3)、在启动类上加注解@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign") ```java @EnableFeignClients(basePackages = "com.atguigu.gulimall.product.feign") @SpringBootApplication public class XXXApplication { public static void main(String[] args) { SpringApplication.run(XXXApplication.class, args); } } ``` # Hystrix 断路器 当远程调用getSkuSeckillInfo,调用失败会调用fallback熔断方法上面第2点 ```java @Slf4j @Component public class SeckillFeignServiceFallBack implements SeckillFeignService { @Override public R getSkuSeckillInfo(Long skuId) { log.info("熔断方法调用...getSkuSeckillInfo"); return R.error(BizCodeEnume.TOO_MANY_REQUEST.getCode(),BizCodeEnume.TOO_MANY_REQUEST.getMsg()); } } ``` # Ribbon 负载均衡策略 添加一个配置类 ```java @Configuration public class MyRuleConfig { @Bean @LoadBalanced public IRule myRule(){ return new RandomRule(); } } ``` 主启动类上加注解及参数 ```java @EnableFeignClients(basePackages = "com.atguigu.gulimall.product.feign") @SpringBootApplication(excludeName = "MyRuleConfig") @RibbonClient(name = "gulimall-seckill",configuration = MyRuleConfig.class) public class XXXApplication { public static void main(String[] args) { SpringApplication.run(XXXApplication.class, args); } } ```