003-spring cloud alibaba之gateway网关

gateway

gateway网关主要就是对外接收各种请求,然后根据自己内容的路由逻辑将请求发给服务

graph TD Start --> gateway gateway --> 路由 路由 --> user 路由 --> base 路由 --> order 路由 --> ...

gateway服务搭建

第1步:依赖

构建一个gateway服务只需要增加相应的依赖

xml 复制代码
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>gateway</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-cloud-alibaba-version>2021.1</spring-cloud-alibaba-version>
        <spring-cloud.version>2020.0.1</spring-cloud.version>
        <spring-boot.version>2.4.2</spring-boot.version>
    </properties>

    <dependencies>
        <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>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <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>
            <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>
        </dependencies>
    </dependencyManagement>

</project>

第2步:创建yaml文件

主要是要新增路由逻辑配置

yaml 复制代码
server:
  port: 9999
spring:
  application:
    name: gateway-service
  cloud:
    nacos:
      discovery:
        server-addr: 10.106.114.1:8848
    gateway:
      routes:
        - id: user
          uri: http://10.106.114.1:9001/
          predicates:
            - Path=/user/**

上面配置的gateway.routes就是路由

  • id:标记路由

  • predicates:路由配置

    • Path:其中一个路径,上面/user/**表示当请求localhost:9999/user/xxx时,会将请求转发到http://10.106.114.1:9001/user/xxx
  • uri:转发的地址

第3步:启动类

java 复制代码
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayStartApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayStartApplication.class,args);
    }
}

第4步创建user服务

user服务主要要注意的是,由于请求是http://10.106.114.1:9001/user/xxx多了一个user,所以需要在user服务里面增加context-path。下面是user服务的配置

yaml 复制代码
server:
  port: 9001
  servlet:
    context-path: /user/

spring:
  application:
    name: user
  cloud:
    discovery:
      server-addr: 127.0.0.1:8848

management:
  endpoint:
    web:
      exposure:
        include:'*'

第5步验证

自定义路由

上面使用的配置文件来实现路由。也可以使用自定义类来实现路由模式。

第1步:注释yaml里面的路由配置

第2步:创建自定义类路由

java 复制代码
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class GatewayConfig {

    @Bean
    public RouteLocator customerRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
        System.out.println("加载路由");
        RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
        routes.route("user",
                r->r.path("/user/**").uri("http://10.106.114.1:9001/"));
        return routes.build();
    }
}

第3步:验证

效果同样

相关推荐
wdyan29719 小时前
带着小白学习-微服务-5 实战:配置中心-数据库连接
数据库·学习·微服务
胡写代码2 天前
把数据库连接搬进配置中心,服务起不来:spring.config.import 的 4 个必填项
spring cloud·微服务
利威尔xu4 天前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
利威尔xu4 天前
Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
redis·后端·微服务·面试·golang
骑着蜗牛撵大象3275 天前
Spring Boot 4.1 + Spring AI 2.0:RAG 供文、图谱供关系、MCP 供工具的 Java Agent 平台
java·spring boot·spring·微服务·知识图谱·rag·mcp
code_slave(码畜)5 天前
微服务架构落地:慢 SQL 治理与连接池调优 —— 守住数据库的最后一道防线
数据库·spring boot·sql·spring cloud·微服务·架构
微三云 - 廖会灵 (私域系统开发)7 天前
企业级 SaaS 系统架构设计:单体、微服务还是模块化单体?技术选型实战
微服务·架构·系统架构
shuair7 天前
Spring Cloud 微服务脚手架:Simple Cloud 系统架构设计
spring cloud·微服务·系统架构
CodeGL7 天前
微服务框架——go-zero
微服务·架构·golang
草莓熊Lotso7 天前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生