当前位置: 首页 > news >正文

SpringCloud(三)

目录

1.http客户端Feign

1.1Feign替代RestTemplate

1.1.1Feign的介绍

1.1.2定义和使用Feign客户端

1.2自定义配置

配置Feign日志有两种方式:

1.3Feign使用优化

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

1.4Feign的最佳实践

2.统一网关Gateway

2.1为什么需要网关

网关的技术实现

2.2gateway快速入门

搭建网关服务的步骤:

执行逻辑

总结:

2.3断言工厂

2.4过滤器工厂

默认过滤器

2.5全局过滤器GlobalFilter

总结

过滤器执行顺序

2.6跨域配置


1.http客户端Feign

1.1Feign替代RestTemplate

我们以前利用RestTemplate发起远程调用代码:

存在下面的问题:

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

1.1.1Feign的介绍

Feign是一个声明式的http客户端,其作用就是帮助我们优雅的实习http请求的发送,解决上面提到的问题。

1.1.2定义和使用Feign客户端

1.引入依赖:

2.在order-service启动类添加注解开启Feign功能

3.编写Feign客户端

主要是基于SpringMVC的注解来声明远程调用的信息,比如:

  • 服务名称:userservice
  • 请求方式:GET
  • 请求路径:/user/{id}
  • 请求的参数:Long id
  • 返回值类型:User

1.2自定义配置

Feign运行自定义配置来覆盖默认的配置,可以修改的配置如下:

一般我们需要配置的就是日志级别

配置Feign日志有两种方式:

方式一:而皮质文件方式

1.全局生效

2.局部生效

配置Feign日志的方式二:java代码方式,需要先声明一个bean:

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

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

1.3Feign使用优化

Feign是一个声明式客户端,最终发起请求还是会调用底层

Feign底层的客户端实现:

  • URLConnection:默认实现,不支持连接池
  • Apache HttpClient:支持连接池
  • OKHttp:支持连接池

因此优化Feign的性能主要包括:

  • 1.使用连接池代替默认的URLConnection
  • 2.日志级别,最好用basic或none

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

引入依赖:

配置连接池:

1.4Feign的最佳实践

  • 方式一(继承):给消费者的FeignClient和提供的controller定义统一的符接口作为标准

但是Feign官方却说明不推荐共享接口方式,因为会造成紧耦合

  • 方式二(抽取):将FeignClient抽取为独立模块,并且把接口有关的POJO,默认的Feign配置都放到这个模块中,提供给所有消费者使用

实现方式二的步骤如下:

  • 1.首先创建一个module,命名为feign-api,然后引入feign的starter依赖
  • 2.将order-service中编写的UserClient,User,DefaultFeignConfiguration都复制到feign-api项目中
  • 3.在order-service中引入feign-api的依赖
  • 4.修改order-service中的所有与上述三个组件相关的import部分,改查导入feign-api中的包

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

方式一:指定Feignclient所在包

方式二:指定FeignClient字节码

 

2.统一网关Gateway

2.1为什么需要网关

网关功能:其实就是对整个微服务的一种保护

  • 身份认证和权限校验
  • 服务路由,负载均衡
  • 请求限流

网关的技术实现

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

  • gateway
  • zuul

Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的webFlux,属于响应式编程的实现,具备更好的性能。

2.2gateway快速入门

搭建网关服务的步骤:

1.创建新的module,引入SpringCloudGateway的依赖和nacos的服务发现依赖:

2.编写路由配置及nacos地址

执行逻辑

总结:

2.3断言工厂

我们在配置文件中写到断言规则只是字符串,这些字符串会被PredicateFactory读取并处理,转变为路由判断的条件

Spring提供了11种基本的Predicate工厂:

2.4过滤器工厂

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:

Spring提供了31种不同的路由过滤器工厂

默认过滤器

如果要对所有的路由都生效,则可以将过滤器工厂写到default下。格式如下:

2.5全局过滤器GlobalFilter

全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。

区别于GatewayFilter通过配置定义,处理逻辑是固定的。而GlobalFilter的逻辑需要自己写代码实现。

定义方式实现GlobalFilter接口。

总结

过滤器执行顺序

请求进入网关会碰到三类过滤器:当前路由过滤器,DefaultFilter,GlobalFilter

请求路由后,会将当前路由过滤器和DefaultFilter,globalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器

2.6跨域配置

跨域:域名不一致就是跨域,主要包括:

网关处理跨域采用的同样是CORS方案,并且只需要简单配置即可实现:

相关文章:

  • window 显示驱动开发-视频内存供应和回收(一)
  • Qt状态机QStateMachine
  • 插值算法 - 图像缩放插值QT
  • 简说Qt信号和槽
  • Flink中Kafka连接器的基本应用
  • Qt5、C++11 获取wifi列表与wifi连接
  • 论文流程图mermaid解决方案
  • Java集合框架深度剖析:结构、并发与设计模式全解析
  • Qt C++图书管理系统
  • 轴承与螺母表面缺陷数据集
  • PostgreSQL跨数据库表字段值复制实战经验分
  • DAY8字典的简单介绍
  • 30.第二阶段x64游戏实战-认识网络数据包发送流程
  • 深入了解linux系统—— 文件系统
  • 即插即用性能提升技巧:YOLOv8集成OREPA卷积的5个关键步骤(附精度/速度对比)
  • Java大厂面试:JVM调优、高并发订单处理与大数据服务场景解析
  • 【补题】The 2021 ICPC Asia Nanjing Regional Contest Problem J. Xingqiu’s Joke
  • 使用 Navicat 17 for PostgreSQL 时,请问哪个版本支持 PostgreSQL 的 20150623 版本?还是每个版本都支持?
  • 【Redis】三、在springboot中应用redis
  • 第十周作业
  • wordpress hosts/百度seo推广方案
  • 大连开发区网站/百度一下搜索引擎
  • 免费网站建设协议/友情链接平台网站
  • 免费自助网站/搭建网站流程
  • 安徽平台网站建设企业/百度网盘资源搜索引擎搜索
  • 企业内网 网站建设的解决方案/平台怎么推广技巧