• http客户端Feign


    Feign替代RestTemplate
    使用RestTemplate的方式:
    RestTemplate是SpringWeb提供的Http客户端,但是使用RestTemplate代码可读性差,且参数复杂 url 难维护。

    //        String url = "http://localhost:8081/user/" + order.getUserId();
    //        将IP地址和端口号改为服务名称
            String url = "http://userService/user/" + order.getUserId();
            User user = restTemplate.getForObject(url, User.class);
    
    • 1
    • 2
    • 3
    • 4

    使用Feign:
    1.添加依赖

            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-openfeignartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4

    2.在orderService的启动类上添加注解开启Feign功能
    @EnableFeignClients
    3.编写Feign客户端

    @FeignClient("userService")						// 指定调用的服务名称
    public interface userClient {
        @GetMapping("/user/{id}")					// 请求方式 + 路径
        User findById(@PathVariable Long  id);		// 返回值类型 + 请求参数
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.使用

        @Autowired
        private userClient userClient;
        
        public Order queryOrderById(Long orderId) {
            // 1.查询订单
            Order order = orderMapper.findById(orderId);
    
            // 2.用 Feign远程调用
            User user = userClient.findById(order.getUserId());
    
            // 3.填充
            order.setUser(user);
            // 4.返回
            return order;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    如果启动的时候有报错:No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?
    SpringCloud Feign在Hoxton.M2 RELEASED版本之后不再使用Ribbon而是使用spring-cloud-loadbalancer,
    所以不引入spring-cloud-loadbalancer会报错
    考虑:

            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.cloudgroupId>
                        <artifactId>spring-cloud-netflix-ribbonartifactId>
                    exclusion>
                exclusions>
            dependency>
    
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-loadbalancerartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    自定义Feign的配置

    配置Feign日志
    第一种方式:

    feign:
      client:
        config:
          default:		# 这里 default 就是全局配置, 如果是服务名称,则是针对某个服务的配置
            loggerLevel: NONE/BASIC/HEADERS/FULL		# 日志级别(默认是NONE)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    性能优化

    Feign底层的客户端实现:
    HttpURLConnection:默认,不支持连接池,是JDK自带的
    Apache HttpClient:支持连接池
    okhttp:支持连接池
    日志级别最好使用BASIC或者NONE
    使用okhttp

            <dependency>
                <groupId>io.github.openfeigngroupId>
                <artifactId>feign-okhttpartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4

    根据spring-cloud-openfeign-core包下的FeignAutoConfiguration类进行配置

    # feign配置
    feign:
      client:
        config:
          default:
            loggerLevel: NONE
      httpclient:
        enabled: false
        max-connections: 200    # 最大连接数
        max-connections-per-route: 30   # 每个请求的最大连接数
      okhttp:
        enabled: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    IDEA中的debug断点调试技巧

  • 相关阅读:
    最新版IDEA(或Android Studio)Lombok插件安装
    C语言小游戏——扫雷小游戏
    java 泛型静态方法入参泛型类 和 RestTemplate 泛型返回
    北斗网络时钟服务器(北斗卫星授时服务器)应用方案
    gradle使用笔记整理
    openvino多输入多输出动态尺寸样例记录
    【LeetCode 每日一题】15. 三数之和
    【优化充电】基于matlab粒子群算法电动汽车充电动态优化策略【含Matlab源码 2163期】
    图像预处理工具_CogPolarUnwrapTool
    Flink学习9:配置idea开发flink-Scala程序环境
  • 原文地址:https://blog.csdn.net/qq_53318060/article/details/126416734