Gateway入门案例|学习笔记

本文涉及的产品
云原生 API 网关,700元额度,多规格可选
简介: 快速学习Gateway入门案例

开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第三阶段Gateway 入门案例】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/685/detail/11887


Gateway 入门案例

内容介绍

一、引言

二、要实现的功能


一、引言

从客户端发送一个请求,发送到 api 网关上。通过网关希望他可以把请求录入到商品微服务。

写入:要求通过浏览器访问 API 网关。然后通过网关将请求转发到商品微服务。

这个 API 网关可以被看做是一个独立的微服务。所以说我们需要建一个微服务。

1、创建一个 API gateway 的模块。导入相关依赖

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-gateway</artifactid></

dependency>,这里的依赖很简单,只有一个 get away starter。

注意,这里不能导入 web。因为这里用到的东西两者不一样。所以说不能导入web。

2、我们需要创建主类。

添加配置文件

上半部分跟以前是一样的。后半部分我们需要根据 gateway 配置一些路由的参数。什么是路由呢?

路由就是从客户端到 API 网关,再到商品微服务。这个需求就叫微服务,我们要通过一系列的参数配置实现路由的功能。启动项目,并通过网关去访问微服务。


二、要实现的功能

1、创建一个 API-gateway 的模块,导入相关依赖

建立一个 model,命名为 api-gateway,这样的话一个模块就好了,接下来导入依赖,

<?xm1 version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0

http//maven.apache.org/xsd/mave<parent>

<artifactId>springcloud-alibaba</

artifactid><groupId>com.itheima</groupid><version>1.0-SNAPSHOT</version>

</parent>

<modelVersion>4.0.0</modelVersion>

<artifactid>api-gateway</artifactid>

<dependencies>

<!--gateway--  

注意:此模块不能引入 starte-web>

<dependency>

<groupId>org.springframework.cloud</groupid>

<artifactId>spring-cloud-starter-gateway</artifactid></dependency></dependencies>

</project>

第一步中处理好之后来看第二步

2、在 java 中新建一个组类,

放到com.ithemia.APIgateway.application.中,按照 spring boot 的要求,写入代码,

并加入注解

package com.iteima;

import org.springframework.boot.SpringApplication;import

org.springframework.boot.autoconfigure.SpringBootApplication,

@SpringBootApplication

public class ApiGatewayApplication{

public static void main(String[] args) {

SpringApplication.run(ApiGatewayApplication.class);

第二步结束,接下来进行最重要的第三步

3、添加配置文件

在 resources 中添加配置文件,命名为 application.yml,先配置基础的东西,端口7000作为网关,

以下是路由要配置的东西:

@NotEmpty

private string id

= UUID.randomUUID().tostring();@NotEmpty@Validprivate List<PredicateDefinition> predicates = new

ArrayList();@Valid

private list<FilterDefinition> filters = new

ArrayList();@NotNull

private uri uri;

private int order = 0;

先写简单再写难,在案例中,最终要转到商品微服务中,所以他的地址就是local host8081。

Predicate 就是来定义条件的,当请求路径以 product 结尾的时候,要转到商品微服务就是一种条件,反之亦然,要注意,这是一个数组,所以可以写多个条件。

Filters 也是一个数组,是过滤器,作用是在请求传递过程中,对请求做一些手脚,例如对路径加一些东西都是可以的。

如下

server:

port:7000 spring:

application:

name:api-gateway cloud:

gateway:

routes:#路由数组[路由 就是指当请求满足什么样的条件的时候转发到哪个微服务上]

-id:#当前路由发的标识,要求唯一

uri:#请求最终要被转发到的地址

order:#路由的优先级,数字越小代表路由的优先级越高

predicates:#断言(条件判断,返回值是 boolean 转发请求要满足的条件

filters:#过滤器(在请求传递过程中 对请求做一些手脚)

-

到此请求定义的内容就全部讲完了,接下来将这些填充就好。

如 id,有一个默认值 UUID.randomUUID().tostring(),一般是不会用默认值的,是自定义的。

请求以 order 开头的时候,转到订单微服务,以 product 开头的时候,转到商品微服务,借用 path,请求路径满足指定的规则时,路由信息才会正常转发。最后要加一个过滤器,不借用过滤器使得路径不正确,使用过滤器将多余的去掉,传递过程中删掉一些东西。过滤器 stripprofix 指的就是在请求转发之前删掉一层路径。

完整代码如下:

server:

port:7000 spring:

application:

name:api-gateway cloud:

gateway:

routes:#路由数组[路由 就是指当请求满足什么样的条件的时候转发到哪个微服务上]

id:product route#当前路由发的标识,要求唯一,默认是UUID uri:http://localhost:8081# 请求最终要被转发到的地址

order:1#路由的优先级,数字越小代表路由的优先级越高

predicates:#断言(条件判断,返回值是 boolean 转发请求要满足的条件)

-Path=/product-serv/**#当请求路径满足 Path 指定的规则时,此路由信息才会正常转发

filters:#过滤器(在请求传递过程中对请求做一些手脚)

- stripPrefix=1 #在请求转发之前去掉一层路径

# localhost:7000/product-serv/product/1-->http://localhost:8081/product/1

开始测试:

开始测试时先运行 product,接着运行 gateway。

先不使用网关,直接访问一次,访问 localhost:8081|product|1,可以发现没有问题;

接下来通过网关服务,访问

localhost:7000|product-serv|| product |1,这个过程中会转发到 local host 中,测试效果发现没有任何问题,这样我们就达到了通过 springcloud gateway 这样一个网关请求微服务的一个功能。

相关文章
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
1094 0
|
SpringCloudAlibaba 负载均衡 监控
十五.SpringCloudAlibaba极简入门-Gateway网关整合Nacos
这一篇文章算是补充把,之前的Spring Cloud Gateway 是以Eureka为注册中心进行整合的,见《服务网关Gateway》,现在讲一下Spring Cloud Gateway 和Nacos的整合,该文章只介绍了Gateway和Nacos整合部分,请结合《服务网关Gateway》一起看你的收获会更大
|
SpringCloudAlibaba 负载均衡 监控
SpringCloudAlibaba极简入门-Gateway网关整合Nacos
Zuul是Netflix的开源项目,Spring Cloud将其收纳成为自己的一个子组件。zuul用的是多线程阻塞模型,它本质上就是一个同步 Servlet,这样的模型比较简单,他都问题是多线程之间上下文切换是有开销的,线程越多开销就越大。线程池数量固定意味着能力接受的请求数固定,当后台请求变慢,面对大量的请求,线程池中的线程容易被耗尽,后续的请求会被拒绝。 在Zuul 2.0中它采用了 Netty 实现异步非阻塞编程模型,异步非阻塞模式对线程的消耗比较少,对线程上线文切换的消耗也比较小,并且可以接受更多的请求。它的问题就是线程模型比较复杂,要求深究底层原理需要花一些功夫。
241 0
|
SpringCloudAlibaba Java Sentinel
十四.SpringCloudAlibaba极简入门-Sentinel对Gateway网关进行限流
服务网关在微服务架构中充当了请求访问入口的角色,是非常重要的一个部分,在高并发的系统中我们通常会在网关层通过流控降级等手段把多余的请求拒绝在外来防止微服务被高并发请求打垮,在之前我们有讨论过《服务网关Spring Cloud Gateway》和 《Sentinel流控》,一个是服务网关,一个是流控降级,本篇文章要讨论的是如何使用Sentinel对Gateway进行流控
|
数据采集 监控 Java
|
前端开发 Java 中间件
MyCat - 环境搭建 - 微服务网关 gateway 搭建 | 学习笔记
快速学习 MyCat - 环境搭建 - 微服务网关 gateway 搭建
MyCat - 环境搭建 - 微服务网关 gateway 搭建 | 学习笔记
|
Java 开发者 Spring
Gateway 内置路由断言|学习笔记
快速学习 Gateway 内置路由断言
Gateway 内置路由断言|学习笔记
|
监控 Java API
Gateway 概念及执行流程|学习笔记
快速学习 Gateway 概念及执行流程
Gateway 概念及执行流程|学习笔记
|
Java 开发者 微服务
Gateway 过滤器简介|学习笔记
快速学习 Gateway 过滤器简介
Gateway 过滤器简介|学习笔记
|
Java 数据安全/隐私保护 开发者
Gateway 全局过滤器|学习笔记
快速学习 Gateway 全局过滤器
Gateway 全局过滤器|学习笔记