成都网站建设设计

将想法与焦点和您一起共享

Http客户端Feign的使用(黑马springcloud笔记)-创新互联

Feign基本使用

创新互联网站建设由有经验的网站设计师、开发人员和项目经理组成的专业建站团队,负责网站视觉设计、用户体验优化、交互设计和前端开发等方面的工作,以确保网站外观精美、成都网站设计、网站制作易于使用并且具有良好的响应性。目录
  • Feign基本使用
    • 一、Feign代替RestTemplate
    • 二、自定义配置
    • 三、Feign使用优化
      • 1. 底层优化
      • 2. 日志优化
    • 四、最佳实践
      • 方式一:继承
      • 方式二:抽取

一、Feign代替RestTemplate

步骤:

  1. 引入依赖

    org.springframework.cloudspring-cloud-starter-openfeign
  2. 启动类上添加注解@EnableFeignClients

  3. 编写Feign客户端

    @FeignClient("userService")
    public interface UserApi {@GetMapping("/user/{id}")
        User findById(@PathVariable Long id);
    }
  4. 使用

    这是RestTemplate的代码

    @Service
    public class OrderService {@Autowired
        private OrderMapper orderMapper;
        @Autowired
        RestTemplate restTemplate;
    
        public Order queryOrderById(Long orderId) {// 1.查询订单
            Order order = orderMapper.findById(orderId);
            // 2.调用REST接口查询数据
            User user = restTemplate.getForObject("http://userService/user/" + order.getUserId(), User.class);
            // 3.封装数据
            order.setUser(user);
            // 4.返回
            return order;
        }
    }

    这是Feign的代码:

    @Service
    public class OrderService {@Autowired
        private OrderMapper orderMapper;
        
        @Autowired
        UserApi userApi;
        
        public Order queryOrderById(Long orderId) {// 1.查询订单
            Order order = orderMapper.findById(orderId);
            // 2.调用REST接口查询数据
            User user = userApi.findById(order.getUserId());
            // 3.封装数据
            order.setUser(user);
            // 4.返回
            return order;
        }
    }

    代码可读性更高了,并且自带负载均衡。

二、自定义配置

feign可以自定义配置一些东西:

在这里插入图片描述

springboot中配置一般都是两种方式,代码或者application.yml

  1. 代码

    @Bean
    public Logger.Level feignLogLevel() {return Logger.Level.FULL;
    }

    若是全局生效,需要在启动类的注解中加上该配置类:

    @EnableFeignClients(defaultConfiguration = CustomConfiguration.class)

    若是局部,只需要在对应的客户端中声明:

    @FeignClient(value = "userService", configuration = CustomConfiguration.class)
  2. application.yml

    配置文件同样也可以配置全局或者局部

    全局:

    feign:
      client:
        config:
          default: # 这个就是区分全局或者局部的 若是default则是全局
            logger-level: full

    局部:

    feign:
      client:
        config:
          userService: # 这个就是区分全局或者局部的 若是default则是全局
            logger-level: full
三、Feign使用优化 1. 底层优化

Feign底层实现默认是URLConnection,不支持连接池,效率低。

我们可以选择Apache HttpClient或是OKHttp(俩都支持连接池)来优化Feign的性能。

以HttpClient为例:

  • 引入依赖

    io.github.openfeignfeign-httpclient
  • 配置连接池

    feign:
      httpclient:
        enabled: true # 开启feign对httpclient的支持
        max-connections: 200 # 大连接数
        max-connections-per-route: 50 # 每个路径大连接数
2. 日志优化

简单说就是使用NONE级别或是BASIC级别,级别高了消耗性能。

四、最佳实践 方式一:继承

给消费者的FeignClient和提供者的Controller定义一个统一的父接口作为标准。

在这里插入图片描述

缺点:紧耦合

方式二:抽取

就是搞一个公共的模块,把多个微服务都需要的接口写在里面,需要使用时引入即可。

在这里插入图片描述

缺点就是会引入很多不用的东西。

实现:

  1. 创建新的公共模块,导入feign的依赖,创建普通maven项目即可,不然打包时有坑。

  2. 将order-service中的Feign客户端、实体类、Feign的配置等移入该公共模块

  3. 在order-service中引入该公共模块

    如:

    com.examplefeign-api0.0.1-SNAPSHOT
  4. 指定客户端

    两种方式

    • 扫描包,全部导入

      @EnableFeignClients(basePackages = "com.example.feignapi.apis")

      该包下的所有feign客户端都会被扫描

    • 指定客户端导入

      @EnableFeignClients(clients = {UserAPI.class})

      指定客户端,可以是一个数组

    建议使用第二种。

  5. 测试在这里插入图片描述

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章标题:Http客户端Feign的使用(黑马springcloud笔记)-创新互联
文章分享:http://chengdu.cdxwcx.cn/article/djoicd.html