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

效果同样

相关推荐
Gofarlic_oms11 天前
UG/NX浮动许可证池智能配置与负载均衡策略
大数据·运维·网络·人工智能·微服务·负载均衡
哪里不会点哪里.1 天前
什么是微服务?
微服务·云原生·架构
indexsunny1 天前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用
java·数据库·spring boot·redis·微服务·kafka·电商
没有bug.的程序员1 天前
Spring Cloud Stream:消息驱动微服务的实战与 Kafka 集成终极指南
java·微服务·架构·kafka·stream·springcloud·消息驱动
编程彩机1 天前
互联网大厂Java面试:从微服务到分布式事务的技术场景解析
spring cloud·微服务·kafka·分布式事务·java面试
喵了几个咪1 天前
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架・内置微服务接口数据聚合能力
微服务·云原生·架构
帅次2 天前
系统分析师-微服务系统分析与设计
docker·微服务·zookeeper·容器·kubernetes·etcd·kubelet
J_liaty2 天前
OpenFeign微服务实战指南
微服务·云原生·架构·openfeign
玄〤2 天前
MyBatis-Plus 核心功能详解:条件构造器、Service 封装与批量优化实践(黑马springcloud微服务课程)(day2)
spring cloud·微服务·mybatis
爬山算法2 天前
Hibernate(65)如何在微服务架构中使用Hibernate?
微服务·架构·hibernate