0
点赞
收藏
分享

微信扫一扫

初识springcloud-gateway的技术架构和原理

探头的新芽 2022-02-21 阅读 66

关于网关

单体应用拆分成多个服务后,对外需要一个统一入口,解耦客户端与内部服务

在这里插入图片描述
Gateway 本身是一个 Spring Boot 应用,它处理请求是逻辑是根据配置的路由对请求进行预处理和转发。Gateway 有几个比较核心的概念:

Route: 一个 Route 由路由 ID,转发 URI,多个 Predicates 以及多个 Filters 构成。Gateway 上可以配置多个 Routes。处理请求时会按优先级排序,找到第一个满足所有 Predicates 的 Route。
Predicate: 表示路由的匹配条件,可以用来匹配请求的各种属性,如请求路径、方法、header 等。一个 Route 可以包含多个子 Predicates,多个子 Predicates 最终会合并成一个。
Filter: 过滤器包括了处理请求和响应的逻辑,可以分为 pre 和 post 两个阶段。多个 Filter 在 pre 阶段会按优先级高到低顺序执行,post 阶段则是反向执行。Gateway 包括两类 Filter
全局 Filter: 每种全局 Filter 全局只会有一个实例,会对所有的 Route 都生效。
路由 Filter: 路由 Filter 是针对 Route 进行配置的,不同的 Route 可以使用不同的参数,因此会创建不同的实例。

执行过程

1.客户端向 Spring Cloud Gateway 发出请求。
2.然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。
3.Handler 再通过指 定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑。

##路由配置
路由是 Gateway 的核心构件,不同的路由根据匹配条件可以处理不同类型的请求,并转发到对应的目标服务。一个路由由以下几个属性组成

Id: 路由 ID。
Uri: 转发请求的目标地址。
Order: 顺序(优先级)。
Predicate: 匹配条件。多个 Predicates 会合并成一个聚合的条件。
Filters: 路由过滤器。这些过滤器最终会和全局过滤器一起排序处理匹配成功的请求。
Metadata: 额外的元数据。

springboot整合gateway

1.导入依赖

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
		</dependency>
 		<!--服务注册/发现中心依赖-->
    	<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      	</dependency>

        <!--服务的配置中心依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

2.开启服务的注册发现
在启动类上添加注解 @EnableDiscoveryClient

@EnableDiscoveryClient
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

3.配置网关的路由规则

spring:
		application:
				name: gateway-server
		cloud:
			gateway:
			#路由规则
			routes:
				- id : product-server    #路由ID 唯一
				   uri: http://localhost:7070/   #目标URI,路由到微服务的地址
				   predicates:    #断言
				       -Method
举报

相关推荐

0 条评论