https://landscape.cncf.io/card-mode?category=api-gateway&grou...
一、环境我的项目筹备
1、创立Spring Cloud Gateway API 网关我的项目
- 新建 demo-gateway 我的项目
pom 依赖如下
<?xml 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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>demo-gateway</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo-gateway</name> <description>demo-gateway</description> <properties> <java.version>17</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.6.13</spring-boot.version> <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version> <spring-cloud.version>2021.0.5</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>17</source> <target>17</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <mainClass>com.example.gateway.DemoGatewayApplication</mainClass> <skip>true</skip> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build></project>
配置文件 bootstrap.yml
server: port: 8099spring: application: name: demo-gateway profiles: active: dev cloud: nacos: discovery: server-addr: NacosIP地址:8848 config: server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yml
2、创立Srping Cloud 接口服务 我的项目
新建 demo-api 我的项目
pom 依赖如下<?xml 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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>demo-api</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo-api</name> <description>demo-api</description> <properties> <java.version>17</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>3.0.0</spring-boot.version> <spring-cloud-alibaba.version>2022.0.0.0-RC1</spring-cloud-alibaba.version> <spring-cloud.version>2022.0.0-RC2</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>17</source> <target>17</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <mainClass>com.example.demo.api.DemoApiApplication</mainClass> <skip>true</skip> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories></project>
配置文件 bootstrap.yml
server: port: 9001spring: application: name: demo-api profiles: active: dev cloud: nacos: discovery: server-addr: NacosIP地址:8848 config: server-addr: ${spring.cloud.nacos.discovery.server-addr} file-extension: yml
3、下载启动 Naocs 作为服务配置注册核心
- 下载安装
本地下载装置详见 https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html
当然也可Docker形式详见 https://nacos.io/zh-cn/docs/v2/quickstart/quick-start-docker....
- 增加demo-gateway、demo-api的配置文件
demo-gateway-dev.yml
spring: cloud: gateway: routes: # 路由的ID,没有固定规定,但要求惟一,倡议配合服务名 - id: demo-api # 匹配后提供服务的路由地址 uri: lb://demo-api predicates: - Path=/api/**
demo-api-dev.yml
demo: params: 来自Nancos配置核心的数据
4、装置并运行 APISIX API 网关
本次应用CentOS 选用Docker形式装置,须要先装置 Docker和Docker-Compose
- Docker 装置
## 卸载旧版本sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine## 设置 Docker 存储库sudo yum install -y yum-utilssudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo## 装置运行sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginsudo systemctl start docker## 设置docker 开机自启systemctl ebable docker
Docker Compose 装置
## 下载安装(龟速,或者应用后边的形式)curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose## 通过地址离线下载上传CentOS后执行sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose -v
正菜来了!APISIX 装置
## 首先下载apisix-docker仓库(龟速持续离线下载上传)git clone https://github.com/apache/apisix-docker.git## 应用Nacos 服务发现注册,配置Nacoscd apisix-docker-master/example/apisix_conf## 增加Nacos地址discovery:nacos: host: - "http://NacosIP地址:8848"## 回到apisix-docker-master/example 门路下,应用 docker-compose 启用 APISIXdocker-compose -p docker-apisix up -d
- 下载启动实现,拜访http://CenOS机器IP地址:9000/ 即APISIX Dashboard 界面
账号密码查看apisix-docker-master/example/dashboard_conf/conf.yaml 默认admin/admin
后期筹备工作实现!
二、Spring Cloud Gateway 网关运行测试
- 启动 demo-gateway、demo-api服务,默认9001再启动个9002 服务做负载。
- 发送申请
http://SpringCloudGatewayIP:8099/api/demo
发送两次申请,失去9001和9002的轮询响应
Hello :9001--> 来自Nancos配置核心的数据Hello :9002--> 来自Nancos配置核心的数据
三、Spring Cloud Gateway 改成 APISIX 网关运行测试
- 登录APISIX Dashboard,配置上游服务发现Naocs
- 配置路由,除了标注和非凡配置,一路欢快的下一步即可
- 发送申请
http://APISIX的机器IP:9080/api/demo
发送两次申请,失去9001和9002的轮询响应
Hello :9001--> 来自Nancos配置核心的数据Hello :9002--> 来自Nancos配置核心的数据
到此,最最最根底的代替就实现啦!