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种路由过滤,每种过滤器都有独特的作用

网关登录校验

相关推荐
凤山老林8 分钟前
高可靠 API 网关架构:Spring Cloud Gateway 集成 Sentinel 实现智能限流、动态路由与安全管控
安全·spring cloud·架构·sentinel
AAA代码批发商9 分钟前
Days 32 Linux 多线程:线程分离属性、多进程 vs 多线程、线程同步互斥锁、信号量
linux·笔记
陈天伟教授20 分钟前
【30天学会机械制图 第15 天】项目四 学会看零件图 任务1 学习零件的基本表达方法 (1)
学习·工程制图·机械制图
从零开始的嵌入式之旅24 分钟前
day31
linux·c语言·经验分享·笔记·嵌入式硬件
小张帅三代27 分钟前
yolo基础学习笔记
笔记·学习·yolo
zttbee29 分钟前
vue学习(白话功能版)
前端·vue.js·学习·前端框架
北风toto35 分钟前
UML(统一建模语言)详细笔记
笔记·uml·软件设计师
ouynagda1 小时前
Linux 进程与线程学习笔记
linux·笔记·学习
手握风云-2 小时前
一条消息的旅程:RabbitMQ 学习与实践(四)
学习