springcloud篇2-feign、gateway

一、Feign(http客户端,替代RestTemplate)

1.1 简介

之前不同的服务之间进行远程调用使用的是RestTemplate。
在这里插入图片描述
存在下面的问题:
(1)代码可读性差,编程体验不统一;
(2)参数复杂,URL难以维护。

Feign(发音“奋”)是一个声明式的http客户端,作用是帮助我们便捷地实现http请求的发送。

1.2 使用步骤

在这里插入图片描述
在这里插入图片描述
上图中写了一个接口UserClient,该接口中包含所有对user-service服务的远程调用,@FeignClient指明服务名,基于SpringMVC的注解(包括@GetMapping,@PathVariable等)声明远程调用的信息。
在这里插入图片描述
说明:
@FeignClient注解说明远程调用地服务名称。

例如:
(1)在order-service项目中添加feign客户端依赖并开启自动装配功能
在这里插入图片描述

  <!--feign客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

在这里插入图片描述
(2)在order-service中新建接口声明
在这里插入图片描述

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);
}

(3)在order-service中使用声明的接口发起远程调用
在这里插入图片描述

    @Autowired
    private UserClient userClient;


    public Order queryOrderById(Long orderId) {
   
   
        // 1.查询订单
        Order order = orderMapper.findById(orderId);

       User user = userClient.findById(order.getUserId());
        order.setUser(user);
        return order;
    }

在这里插入图片描述
在这里插入图片描述

1.3 自定义配置

在这里插入图片描述
说明:
(1)日志级别
NONE-没有日志
BASIC-记录请求的开始和结束时间及耗时多久
HEADERS-记录请求的开始和结束时及耗时多久、请求头和响应头
FULL-记录请求的开始和结束时、请求头和响应头、请求体和响应体

1.3.1 修改日志文件的级别

在这里插入图片描述
例如:
在order-serivce配置,
在这里插入图片描述

feign:
  client:
    config:
      default:
        loggerLevel: Full

在这里插入图片描述
在这里插入图片描述
日志查看:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:全局配置的注解写在Application类(例如order-service的OrderApplication类)上,局部配置的注解写在Feign的配置类上(例如order-service的UserClient类)。
例如,在order-service中进行配置,
声明一个Bean:
在这里插入图片描述

public class DefaultFeignConfiguration {
   
   
    @Bean
    public Logger.Level logLevel(){
   
   
        return Logger.Level.BASIC;
    }
}

加全局有效注解:
在这里插入图片描述

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class)

1.4 性能优化

Feign底层的客户端实现(三种模式):
在这里插入图片描述
URLConnection性能不太好,也不支持连接池。建立连接池以后可以减少连接创建和销毁的性能损耗(连接创建时要三次握手,断开时要四次挥手)。
对Feign性能的优化,主要是对底层客户端的改变。
另外,Feign的日志级别也会影响性能,最佳是设置为basic或none。
在这里插入图片描述

1.4.1 连接池配置

在这里插入图片描述
在orderservice服务中加依赖:
在这里插入图片描述

        <!-- 引入HttpClient依赖-->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>

在这里插入图片描述

feign:
  httpclient:
    enabled: true # 支持httpClient的开关
    max-connections: 200 # 最大连接数
    max-connections-per-route: 50 # 单个路径的最大连接数

1.5 最佳实践(企业级实践经验)

观察可以看出,order-service发请求的配置与user-service接收的配置一致。
order-service的配置如下:
在这里插入图片描述
user-service的配置如下:
在这里插入图片描述
在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值