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

效果同样

相关推荐
ChaITSimpleLove4 天前
云原生性能对决:JDK21虚拟线程+GraalVM vs .NET10/11 技术栈深度对比
微服务·云原生·serverless·graalvm native·native aot·runtime async·.net11/java21
EatFan5 天前
gRPC 为什么比 HTTP+JSON 快?详细讲解gRPC
后端·微服务·grpc
辛迪聊物业数字化6 天前
智慧物业管理平台架构实践:从SaaS物业云到商管系统的全模块落地
大数据·微服务·php
叶总没有会6 天前
Nacos—注册中心
spring cloud·微服务
天天喝旺仔6 天前
分布式服务容错实战:用 Sentinel 实现限流、熔断与降级
分布式·微服务·云原生·sentinel
周先生FullStack7 天前
Mac + 容器本地 MySQL/Redis 环境搭建与网络原理实战
java·spring boot·微服务·容器·架构·个人开发
叶总没有会7 天前
微服务--分布式基础
java·spring·spring cloud·微服务
weixin_435247067 天前
微服务开发规范模版
微服务·云原生
智慧物业老杨8 天前
物业数字化落地思考:真正的转型,是底层数据秩序的重构
java·大数据·人工智能·微服务·系统架构
VortMall8 天前
VortMall微服务商城系统 v1.3.20 正式发布:分销客户管理与后台安全双升级
微服务·商城系统·开源商城系统