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步:验证

效果同样

相关推荐
重生之我是Java开发战士1 小时前
【Spring Cloud】认识微服务与工程搭建
spring·spring cloud·微服务
MetaLite1 小时前
微服务认证选型-SpringSecurity-SaToken与自研方案
微服务·云原生·架构
梦Arrebol19 小时前
Kubernetes 微服务
微服务·容器·kubernetes
源代码•宸20 小时前
前置准备:定时微服务背景和现状
开发语言·经验分享·后端·微服务·云原生·架构·golang
码云数智-园园1 天前
我为什么从微服务退回单体架构
微服务·云原生·架构
源代码•宸1 天前
前置准备:定时微服务有什么价值
经验分享·后端·微服务·云原生·架构
μθημα1 天前
Kubernetes 微服务网络实践:Service 与 Ingress 从入门到灰度发布
网络·微服务·kubernetes
池以遇1 天前
云原生——k8s中的微服务
微服务·云原生·kubernetes
阿里云云原生1 天前
阿里云微服务引擎 MSE 及 API 网关 2026 年 8 月产品动态
阿里云·微服务·云计算
奇特認1 天前
kubernetes 微服务
微服务·容器·kubernetes