landscape.cncf.io/card-mode?c…
一、环境项目准备
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: 8099
spring:
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: 9001
spring:
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 作为服务配置注册中心
- 下载安装
本地下载安装详见 nacos.io/zh-cn/docs/…
当然也可Docker方式详见 nacos.io/zh-cn/docs/…
- 添加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-utils
sudo 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-plugin
sudo systemctl start docker
## 设置docker 开机自启
systemctl enable docker
## 下载安装(龟速,或者使用后边的方式)
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 服务发现注册,配置Nacos
cd apisix-docker-master/example/apisix_conf
## 添加Nacos地址
discovery:
nacos:
host:
- "http://NacosIP地址:8848"
## 回到apisix-docker-master/example 路径下,使用 docker-compose 启用 APISIX
docker-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 服务做负载。
发送两次请求,得到9001和9002的轮询响应
Hello :9001--> 来自Nancos配置中心的数据
Hello :9002--> 来自Nancos配置中心的数据
三、Spring Cloud Gateway 改成 APISIX 网关运行测试
- 登录APISIX Dashboard,配置上游服务发现Naocs
2. 配置路由,除了标注和特殊配置,一路欢快的下一步即可
3. 发送请求
http://APISIX的机器IP:9080/api/demo
发送两次请求,得到9001和9002的轮询响应
Hello :9001--> 来自Nancos配置中心的数据
Hello :9002--> 来自Nancos配置中心的数据
到此,最最最基础的替代就完成啦!