六、SpringCloud Feign远程调用

在服务消费方引入依赖:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

在启动类上添加注解@EnableFeignClients

@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
@EnableFeignClients
public class UserConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserConsumerApplication.class, args);
    }
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
    }
}

在dao下添加一个接口

@FeignClient(value = "user-service", path = "user", fallback = UserFeignClientFallback.class)
public interface UserClient {

    @GetMapping("findUser/{id}")
    User findUserById(@PathVariable("id") Integer id);
}

在service 中使用

@Service
public class UserService {

    /*@Autowired
    private UserDao userDao;

    public List<User> findUserByIds(List<Integer> ids){
        ArrayList<User> users = new ArrayList<>();
        for (Integer id : ids) {
            User user = this.userDao.findUserById(id);
            users.add(user);
        }
        return users;
    }*/
    @Autowired
    private UserClient userClient;

    public List<User> findUserByIds(List<Integer> ids) {
        ArrayList<User> users = new ArrayList<>();
        for (Integer id : ids) {
            User user = this.userClient.findUserById(id);
            users.add(user);
        }
        return users;
    }
}

在浏览器中测试(注释掉服务提供者中线程睡眠代码)
在这里插入图片描述

二、Feign中的Ribbon和Hystrix

通过依赖可以看到Feign的依赖中已经将Ribbon和Hystrix的依赖添加进来了,已经默认的开启了Ribbon的负载均衡策略
在这里插入图片描述
配置Ribbon的重试机制的时候,可以不用指定某个服务名称,可以全局配置,而熔断则需要通过配置来开启

server:
  port: 8082
spring:
  application:
    name: user-consumer
  cloud:
    loadbalancer:
      retry:
        enabled: true # 开启重试
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka
    fetch-registry: true #拉取Eureka Server服务的列表只读备份,然后缓存在本地
    registry-fetch-interval-seconds: 5 #每隔5秒重新拉取并更新数据,生产环境30
feign:
  hystrix:
    enabled: true # 开启Feign的熔断功能

ribbon:
  ConnectTimeout: 250 # Ribbon的连接超时时间 ms
  ReadTimeout: 1000 # Ribbon的数据读取超时时间
  OkToRetryOnAllOperations: true # 是否对所有操作都进行重试
  MaxAutoRetriesNextServer: 1 # 切换实例的重试次数
  MaxAutoRetries: 1 # 对当前实例的重试次数
logging:
  level:
    org.springframework: debug
    com.liaoxiang: debug

开启熔断后,同样可以指定熔断处理逻辑,并在Feign客户端中使用

@Component
public class UserFeignClientFallback implements UserClient {
    @Override
    public User findUserById(Integer id) {
        User user = new User();
        user.setId(id);
        user.setName("用户查询出现异常!");
        return user;
    }
}
@FeignClient(value = "user-service", path = "user", fallback = UserFeignClientFallback.class)
public interface UserClient {

    @GetMapping("findUser/{id}")
    User findUserById(@PathVariable("id") Integer id);
}

在服务提供者中添加超时异常,通过浏览器访问
在这里插入图片描述
从日志也可以看出,最后一次超时时,进行了重试,然后再熔断
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值