建站公司 源码申请,漯河专业做网站公司,网站基础建设和管理,企业推广怎么写文章目录 一、前言二、gateway网关1、什么是微服务网关#xff1f;2、微服务架构下网关的重要性2.1、没有网关2.2、有网关 3、gateway的功能4、gateway实战4.1、依赖配置4.2、添加网关配置4.3、添加网关启动类4.4、查看项目是否启动成功4.5、验证路由配置是否正确 三、总结 一… 文章目录 一、前言二、gateway网关1、什么是微服务网关2、微服务架构下网关的重要性2.1、没有网关2.2、有网关 3、gateway的功能4、gateway实战4.1、依赖配置4.2、添加网关配置4.3、添加网关启动类4.4、查看项目是否启动成功4.5、验证路由配置是否正确 三、总结 一、前言
微服务架构已经成为现代软件开发的主流范式之一。它允许开发团队将复杂的应用程序拆分成小的、自治的服务单元以便更容易进行开发、部署和维护。然而随着微服务数量的增加管理和维护这些服务变得越来越复杂。这时候微服务网关就成了一个不可或缺的组件用于提高可维护性、安全性和性能。
二、gateway网关
1、什么是微服务网关
微服务网关是位于微服务架构和外部客户端之间的中间层。它充当了微服务体系结构的入口点负责处理所有与客户端之间的通信。微服务网关有多个职责包括路由请求、负载均衡、认证、授权、日志记录和安全性。它可以被看作是微服务架构的门卫用于保护和管理微服务集群。 先看大家看一张图展示一下我们的网关在我们项目中的位置可以看到网关处于我们整个项目中的核心位置我们前端访问后端的所有请求都要通过gateway进行转发。
2、微服务架构下网关的重要性
2.1、没有网关
如果没有网关在微服务的架构下我们前端访问后端的所有微服务要通过不同的端口或者ip以下图示为user、product、shop、order四个微服务部署在了一台虚拟机上分别占用了不同的端口如果前端要想访问后端所有的微服务的话需要通过四个不同的端口进行访问。
2.2、有网关
如果我们使用了网关同样是四个微服务我们只需要通过访问gateway就可以访问所有的微服务了这下是不是一下子就清楚了gateway在微服务架构下的重要性了。
3、gateway的功能
Spring Cloud Gateway 是一个用于构建微服务架构的反向代理和路由工具。 路由(Routing)Spring Cloud Gateway 允许您定义路由规则将传入的请求映射到不同的微服务实例上。路由规则通常基于请求的 URL 路径、请求头、HTTP 方法等条件进行定义。这使得您可以根据不同的请求将它们定向到不同的后端微服务实现动态的请求路由。 请求过滤(Request Filtering)Gateway 提供了请求过滤器允许您在请求到达后端微服务之前修改请求或执行特定操作。您可以使用这些过滤器来添加请求头、修改请求体、进行认证、请求限流、响应转换等。 负载均衡(Load Balancing)Spring Cloud Gateway 集成了负载均衡功能可以分发请求到多个后端微服务实例以确保高可用性和性能。它支持多种负载均衡算法如轮询、权重等您可以根据需要进行配置。 断路器(Circuit Breaker)Gateway 具有断路器模式用于处理后端微服务的故障。当后端微服务不可用时Gateway 可以快速切换到备用服务或返回友好的错误响应而不是长时间等待超时。 动态路由(Dynamic Routing)Gateway 支持动态路由这意味着您可以在运行时添加、修改或删除路由规则而不需要重新启动服务。这使得应对流量变化更加灵活。 请求重试(Request Retry)Gateway 允许您配置请求重试机制以应对后端微服务的瞬时故障。您可以定义重试的次数、间隔和条件确保请求最终成功。 限流(Rate Limiting)通过使用限流过滤器Gateway 可以限制每个客户端或每个 IP 地址的请求速率。这有助于保护后端微服务免受过多的请求压力。 集成安全性(Integration with Security)Gateway 可以与认证和授权系统集成以确保只有授权的用户可以访问受保护的微服务。您可以使用 Spring Security 或其他安全框架来实现此功能。 日志记录(Logging)Gateway 具有强大的请求和响应日志记录功能这对于故障排除和监控非常有用。您可以配置日志级别和输出格式以满足您的需求。 监控和度量(Monitoring and Metrics)Gateway 可以集成监控和度量系统例如 Spring Cloud Sleuth 和 Micrometer以便实时监控流量和性能并进行分析。 WebSocket 支持Gateway 支持 WebSocket 协议允许您处理实时的双向通信。 自定义路由规则(Custom Routing Rules)Gateway 提供了丰富的扩展机制允许您编写自定义的路由规则和过滤器以满足特定需求。
4、gateway实战
4.1、依赖配置
引入相关依赖SpringBoot、SpringCloud、SpringCloud gateway 先来看一下我的项目结构
这里我们在父pom中引入SpringBoot和Spring Cloud的相关依赖
parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.12.RELEASE/versionrelativePath/ !-- lookup parent from repository --
/parent!--版本管理--
propertiesjava.version11/java.versionspring-cloud.versionHoxton.SR12/spring-cloud.versionspring-cloud-alibaba.version2.2.8.RELEASE/spring-cloud-alibaba.version
/properties!--依赖管理--
dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies
/dependencyManagement子pom中引入gateway的相关依赖注意:gateway中不要引入springboot的web模块因为gateway使用的web服务器是netty不是tomcat而springboot的web模块中默认配置的web服务器就是tomcat
!--gateway相关依赖--
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId
/dependency
!-- nacos服务注册/发现--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency
!--nacos配置管理--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId
/dependency4.2、添加网关配置
server:port: 9081servlet:context-path: /gateway-demo
spring:application:name: gateway-democloud:nacos:discovery:server-addr: localhost:8848namespace: wangmengjiegateway:globalcors:cors-configurations:[/**]:allowedOrigins: *allowedHeaders: *allowedMethods: *default-filters:- DedupeResponseHeaderVary Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRSTdiscovery:locator:enable: true #让gateway可以发现nacos中的微服务routes: #路由数组[这里可以放置多个路由]#评分管理模块网关路由配置- id: user-router #当前路由标识-要求唯一默认是UUIDuri: lb://user-demo #请求最终要被转发的地址order: 1 #路由的优先级——数字越小代表路由的优先级越高predicates: #断言条件判断——转发请求要满足的条件- Path/user-service/** #当请求路径满族path指定的规则时此路由信息才会正常转发filters: #过滤器是在请求传递过程中对请求做一些手脚- StripPrefix1 #在请求转发之前去掉一层路径4.3、添加网关启动类
SpringBootApplication(exclude {DataSourceAutoConfiguration.class})
EnableDiscoveryClient//开启nacos服务注册
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class,args);}
}4.4、查看项目是否启动成功
项目启动成功 nacos服务注册成功
4.5、验证路由配置是否正确
通过网关的配置文件我们可以得知user模块配置的断言为user-service/**表明当我们访问localhost:9081/user-service/**的时候请求就会发到我们的网关上面然后gateway通过uri的配置user-demo为user模块在nacos上注册的服务名称 user模块原有的接口地址http://localhost:9000/user/getAllUser 访问网关的接口地址http://localhost:9081/user-service/user/getAllUser 在网关的配置文件中filters的配置在进行请求转发之前会去掉第一层路径也就是通过user-demo获取的user模块服务信息为localhost:9000再加上请求转发的路径所以最终的请求为localhost:9000/user/getAllUser
三、总结
对于项目后台的微服务系统, 每一个微服务都不会直接暴露给用户来调用的, 如果用户知道了某一个服务的 ip:端口号:url:访问参数, 就能直接访问你,甚至是恶意访问等因此需要一个网关作为微服务的统一入口。此篇文章先介绍网关的一些基本集成使用对于网关还有许多知识跨域、过滤器、自定义过滤器、全局过滤器等之后逐一为大家介绍。
如果本篇博客对您有一定的帮助大家记得留言点赞收藏哦。