SpringCloud学习笔记

Day04

OpenFeign

快速入门

OpenFeign是一个声明式的http客户端,是Springcloud在Eureka公式开源的Feign基础上改造而来的。其作用就是基于SpringMVC的常见注解,帮我们优雅实现http请求的发送

OpenFeign已经被SpringCloud自动装配,实现起来非常简单:

1、引入依赖,包括OpenFeign和负载均衡组件SpringCloudLoadBalancer

<!--openFeign-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

<!--负载均衡器-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-loadbalancer</artifactId>

</dependency>

2、通过@EnableFeginClients注解,启用OpenFeign功能

@EnableFeignClients

@MapperScan("com.hmall.cart.mapper")

@SpringBootApplication

public class CartApplication {

public static void main(String\[\] args) {

SpringApplication.run (CartApplication.class, args);

}

@Bean

public RestTemplate restTemplate(){

return new RestTemplate();

}

}

3、编写FeignClient

@FeignClient(value = "item-service")

public interface ItemClient {

@GetMapping("/items")

List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);

}

4、使用FeignCLient

List<ItemDTO> items = itemClient.queryItemByIds(itemIds);

连接池

OpenFeign对Http请求做了优雅的伪装,不过其底层发起的Http请求,依赖于其他框架。这些框架可以自己选择,包括以下三种:

1、HttpURLConnection:默认实现,不支持连接池,不断的链接与断开开销大

2、Apache HttpClient:支持连接池

3、OKHttp:支持连接池

具体步骤:

1、引入依赖

<!--OK http 的依赖 -->

<dependency>

<groupId>io.github.openfeign</groupId>

<artifactId>feign-okhttp</artifactId>

</dependency>

2、开启连接池功能

在application.yml中添加配置:

feign:

okhttp:

enabled: true

最佳实践:

当定义的FeginClient不在SpringBootApplication的扫描包范围时,这些FeginClient无法使用。有两种解决方式:

1、指定FeginClient所在包

@EnableFeignClients(basePackages = "com.hmall.api.client")

2、指定FeignClient字节码

@EnableFeignClients(client={UserClient.class})

日志

OpenFeign只会在FeignClient所在包的日志级别为DEBUG时,才会输出日志。而且其日志级别有4级:

1、NONE:不记录任何日志信息,这是默认值

2、BASIC:仅记录请求的方法,URL以及响应状态码和执行时间

3、HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息

4、FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据

由于Feign默认的日志级别是NONE,所以默认我们看不到请求日志

自定义日志级别需要声明一个类型为Logger.Leve的Bean,在其中定义日志级别:

public class DefaultFeignConfig {

@Bean

public Logger.Level feignLoggerLevel(){

return Logger.Level.FULL ;

}

}

但此时这个Bean并未生效,要想配置某个FeignClient的日志,可以在@FeignCLient注解中声明:

@FeignClients(value="item-service",configuration = DefaultFeignConfig.class)

如果想要全局配置,让所有的FeignClient都按照这个日志配置,则需要在#EnableFeignClients注解中声明:

@EnableFeignClients(basePackages = "com.hmall.api.client",defaultConfiguration = DefaultFeignConfig.class)

网关

网关:就是网络的关口,负责请求的路由、转发、身份校验

网关从注册中心拉取所有的注册服务,前端访问时网关进行校验、路由、转发

在SpringCluod中网关的实现包括两种:

Spring Cloud Gateway:Spring官方出品,基于WebFlux响应式编程,无需调优即可获得优异性能

Netfilx Zuul:Netfile出品,基于Servlet的阻塞式编程,与Spring Cloud Gateway性能类似

配置网关

server:

port: 8080

spring:

application:

name: gateway

cloud:

nacos:

server-addr: 192.168.150.101:8848

gateway:

routes:

  • id: item-service

uri: lb://item-service

predicates:

  • Path=/items/**,/search/**

  • id: user-service

uri: lb://user-service

predicates:

  • Path=/users/**,/addresses/**

  • id: cart-service

uri: lb://cart-service

predicates:

  • Path=/cart/**

  • id: pay-service

uri: lb://pay-service

predicates:

  • Path=/pay/**

路由属性

网关路由对应的Java类型是RouteDefinition,其中常见的属性有:

id:路由的唯一标识

url:路由目标地址

predicate:路由断言,判断请求是否符合当前路由

filters:路由过滤器,对请求或响应做特殊处理

12种基本的RoutePredicateFactory实现:

路由过滤器:网关中提供了33种路由过滤,每种过滤器都有独特的作用

网关登录校验

相关推荐
智者知已应修善业4 小时前
【4060BD_5V应用电路图】2022-12-24
驱动开发·经验分享·笔记·硬件架构·硬件工程
小弥儿4 小时前
GitHub今日热榜 | 2026-09-18:腾讯双项目上榜
学习·开源
知识分享小能手6 小时前
深度学习学习教程,从入门到精通,深度生成模型 —— 知识点详解与代码实现(20)
人工智能·深度学习·学习
m4Rk_7 小时前
【论文阅读】Agent 记忆机制(74):CompassMem——从相似度检索走向事件图上的记忆导航
论文阅读·人工智能·学习·开源·github
小李不想当小白7 小时前
DMA直接存储器存取(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·分享
2601_949950639 小时前
练题簿在线练题全流程:从资料导入到模拟考试与错题复盘
学习·考研·小程序·刷题·小程序推荐
2601_965384269 小时前
口腔黏膜清洁的工程化路径:从表面形貌表征到清洁策略匹配
经验分享·笔记
泡泡鱼(敲代码中)9 小时前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm
别动我齐刘海9 小时前
ROS2 Jazzy + C++ 实战路线——基础学习2
c++·人工智能·vscode·python·学习·机器学习·机器人
Hotchip_MEMS11 小时前
传统咪头与MEMS硅麦:雾化器气流传感方案对比
人工智能·笔记·物联网·电脑·制造