侧边栏壁纸
博主头像
樯哥的技术分享网博主等级

学无止境,学以致用,志存高远。

  • 累计撰写 17 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Spring Cloud网关使用

随心
2023-06-14 / 0 评论 / 0 点赞 / 46 阅读 / 5683 字

网关的简单使用

  1. 基于前面文章的项目,创建一个网关模 service-gateway

  2. pom.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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>top.jiangqiang</groupId>
            <artifactId>spring-cloud-demo</artifactId>
            <version>${revision}</version>
        </parent>
        <artifactId>service-gateway</artifactId>
        <name>${project.artifactId}</name>
        <description>service-gateway</description>
        <properties>
            <java.version>17</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </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-gateway</artifactId>
            </dependency>
            <!--必须依赖,因为网关也用到了负载均衡-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-loadbalancer</artifactId>
            </dependency>
        </dependencies>
    
    </project>
  3. application.yaml文件内容如下:

    server:
      port: 8004
    spring:
      application:
        name: service-gateway
      cloud:
        nacos:
          username: @nacos.username@ #@***@这种写法表示从pom.xml文件读取配置
          password: @nacos.password@
          config:
            file-extension: yaml
            server-addr: @nacos.server-addr@ #用于管理配置的nacos服务地址
            namespace: @nacos.namespace@ #命名空间
          discovery:
            server-addr: @nacos.server-addr@ #服务发现,服务注册中心地址,因为和配置中心使用同一个nacos,所以地址是同一个。
            namespace: @nacos.namespace@
        gateway:
          routes: #-表示配置一个结合,子节点都是集合内部对象的属性
            - id: nacos-route #随便取一个id,多个路由id之间不能重复
              uri: lb://service-provider #lb表示负载均衡,service-provider是服务提供者的spring.application.name
              predicates: #这里又是一个嵌套的集合
                - name: Path
                  args: #args是一个map,前面的-可以加,也可以省略
                    - pattern: /nacos/**
              filters:
                - StripPrefix=1 #去掉/nacos前缀
        loadbalancer: #使用 Spring Cloud Alibaba 社区针对 Spring Cloud Loadbalancer 负载均衡依赖提供的负载均衡策略,以便使用 Spring Cloud Alibaba 提供的所有的能力
          ribbon:
            enabled: false
          nacos: #使用nacos提供的负载均衡,不使用此配置时,默认的负载均衡是轮询
            enabled: true
      config:
        import: #springboot3必须配置此选项,至少配置一个,可以任意配置,配置后会使用nacos配置中心对应的配置
          - optional:nacos:${spring.application.name}.yaml #前面加optional表示可选,允许配置服务器连接不成功时启动服务
          - nacos:datasource.yaml?refresh=true #?refresh=true表示配置更新不需要重启即可生效,可以省略
          - nacos:common.yaml
    
    management:
      endpoints:
        web:
          exposure:
            include: '*' #允许所有的endpoints访问,此时访问:http://127.0.0.1:8004/actuator/health

    大部分配置和前面文章的配置一样,唯独不一样的地方在于:

        gateway:
          routes: #-表示配置一个结合,子节点都是集合内部对象的属性
            - id: nacos-route #随便取一个id,多个路由id之间不能重复
              uri: lb://service-provider #lb表示负载均衡,service-provider是服务提供者的spring.application.name
              predicates: #这里又是一个嵌套的集合
                - name: Path
                  args: #args是一个map,前面的-可以加,也可以省略
                    - pattern: /nacos/**
              filters:
                - StripPrefix=1 #去掉/nacos前缀

    上面配置的作用在于将/nacos/**开头的路径地址转发到service-provider服务中的/**地址。例如我们访问:http://localhost:8004/nacos/getPort 相当于访问到了http://service-provider/getPort,注意:service-provider是指服务提供者的IP和端口号,这里会通过负载均衡自动选择。
    可能很多人会觉得这和nginx实现反向代理和负载均衡没啥区别,但事实上,使用网关还可以对服务进行一些通用的权限访问控制,可能很多人听说过开放网关平台,这就是将内部来自不同服务的接口通过网关暴露出去,提供给第三方开发者使用。同时可以在网关上控制外部对接口的调用次数,以及权限认证。

注意:网关是将内部服务暴露出去给外部开发者使用,所以系统内部服务之间不应该通过网关访问,因为会有性能损耗。

0

评论区