• 七、Feign


    一、Feign实现远程调用

    1.替换RestTemplate发起远程调用,RestTemplate存在的问题:

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

    2.实现Feign远程调用

    在order-service的pom.xml配置文件中引入依赖:

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

    在order-service的启动类添加@EnableFeignClients注解。
    在clients层中编写Feign客户端:

    @FeignClient("userservice")
    public interface UserClient {
        @GetMapping("/user/{id}")
        User findById(@PathVariable("id") Long id);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改orderServiceImpl:

    @Service
    public class OrderServiceImpl implements OrderService {
    
        @Autowired
        private OrderMapper orderMapper;
    
        @Autowired
        private UserClient userClient;
    
    
        /**
         * 根据id查找订单
         */
        @Override
        public Order selectById(Long id) {
            //1.查询订单
            Order order = orderMapper.getById(id);
            //2.利用Fein发起http请求,查询用户
            User user = userClient.findById(order.getUserId());
            order.setUser(user);
            return order;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    调用成功:
    在这里插入图片描述

    二、Feign的自定义日志

    1.Feign可修改的配置如下

    在这里插入图片描述

    2.方式一:配置文件方式

    全局生效:

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

    局部生效:

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

    3.方式二:Java代码方式

    声明一个Bean:

    public class FeignClientConfiguration {
    	@Bean
    	public Logger.Level feignLogLevel(){
    		return Logger.Level.BASIC;
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    全局配置,将这个Bean放在order-service的启动类上的@EnableFeignClients注解中:

    @EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)
    
    • 1

    局部配置,将这个Bean放到@FeignClient这个注解中:

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

    三、Feign的性能优化

    使用连接池代替默认的URLConnection。
    日志级别,最好使用basic和none。

    添加HttpClient的支持

    在order-service的pom.xml中添加依赖:

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

    在order-service的application.yml配置连接池:

    feign:
    	client:
    		config:
    			default:	#default全局的配置
    				loggerLevel: BASIC #日志级别,BASIC就是基本的请求和响应信息
    	httpclient:
    		enabled: true	#开启feign对HttpClient的支持
    		max-connections: 200 #最大连接数
    		max-connections-per-route: 50 #每个路径的最大连接数
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    Python基础知识(一)
    uniapp通过ip获取其地址:
    遥感IDL二次开发(辐射定标)
    功能强大的流式文本编辑器 sed
    每天学习python30分钟(第二天)
    剑指 Offer II 049. 从根节点到叶节点的路径数字之和
    二叉树的经典OJ题
    Leetcode.486 预测赢家
    思腾云计算
    Java基础五大机制 —— SPI机制基础(一)
  • 原文地址:https://blog.csdn.net/m0_59376721/article/details/128053442