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);
}
}
```