• 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断点调试技巧

  • 相关阅读:
    深度学习预备知识(线性代数)
    要在一个长盒子里面实现无缝滚动,为什么我js写好了,还是不能实现无缝滚动呢?
    Ubuntu22.04安装 wordpress
    计算机毕业设计Java微博系统网站(源码+系统+mysql数据库+Lw文档)
    java计算机毕业设计高中生学业水平测试系统MyBatis+系统+LW文档+源码+调试部署
    SCA算法优化脉冲耦合神经网络的图像自动分割(Matlab代码实现)
    认识一些分布函数-Frechet分布及其应用
    Python钢筋混凝土结构计算.pdf-混凝土强度设计值
    mysql的trace追踪SQL工具,进行sql优化
    流量回放工具:goreplay实战
  • 原文地址:https://blog.csdn.net/qq_53318060/article/details/126416734