欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > SpringCloud(三)

SpringCloud(三)

2025/6/30 20:35:24 来源:https://blog.csdn.net/2301_81283571/article/details/148104828  浏览:    关键词: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方案,并且只需要简单配置即可实现:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词