栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

http客户端Feign的使用,自定义Feign的配置,Feign性能优化-连接池配置

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

http客户端Feign的使用,自定义Feign的配置,Feign性能优化-连接池配置

Feign替代RestTemplate

RestTemplate存在下面的问题:

• 代码可读性差,编程体验不统一 • 参数复杂 URL 难以维护

定义和使用Feign客户端

  1.引入依赖:

        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        

  2.在启动类添加注解@EnableFeignClients开启Feign的功能: 

@EnableFeignClients
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

3.编写Feign客户端:

package cn.itcast.order.clients;

import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient("userservice")
public interface UserClient {

    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

4.用Feign客户端代替RestTemplate 

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private UserClient userClient;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.用Feign远程调用
        User user = userClient.findById(order.getUserId());
        // 3.封装user到Order
        order.setUser(user);
        // 4.返回
        return order;
    }

Feign的使用步骤

① 引入依赖 ② 添加 @EnableFeignClients 注解 ③ 编写 FeignClient 接口 ④ 使用 FeignClient 中定义的方法代替 RestTemplate

自定义Feign的配置

配置Feign日志两种方式: 配置文件方式,代码方式

一:配置文件方式:

        1.全局生效

feign:
  client:
    config: 
      default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置                                    
        loggerLevel: FULL #  日志级别 

        2.局部生效

feign:
  client:
    config: 
      userservice: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置            
        loggerLevel: FULL #  日志级别 

二:代码方式:需要先声明一个Bean

public class FeignClientConfiguration {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.BASIC; 
    }
}

        1.如果想要是全局配置,则把它放到@EnableFeignClients这个注解中:

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class) 

        2.如果是局部配置,则把它放到@FeignClient这个注解中:

@FeignClient(value = "userservice", configuration = FeignClientConfiguration.class) 

总结:

Feign的日志配置:

1. 方式一是配置文件, feign.client.config.xxx.loggerLevel ① 如果 xxx 是 default 则代表全局 ② 如果 xxx 是服务名称,例如 userservice 则代表某服务 2. 方式二是 java 代码配置 Logger.Level 这个 Bean ① 如果在 @EnableFeignClients 注解声明则代表全局 ② 如果在 @FeignClient 注解中声明则代表某服务

Feign的性能优化-连接池配置 

  1.引入依赖:

        
        
            io.github.openfeign
            feign-httpclient
        

 2.配置连接池:

feign:
  client:
    config:
      default: # default全局的配置
        loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息 
  httpclient:
    enabled: true # 开启feign对HttpClient的支持
    max-connections: 200 # 最大的连接数
    max-connections-per-route: 50 # 每个路径的最大连接数

Feign的优化:

1. 日志级别尽量用 basic,因为打印日志也消耗性能 2. 使用 HttpClient 或 OKHttp 代替 URLConnection ① 引入 feign- httpClient 依赖 ② 配置文件开启 httpClient 功能,设置连接池参数
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873971.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号