Nacos集成GateWay网关实现动态路由、跨域请求等

一、引入nacos和gateway依赖包:

    
        
        
            org.springframework.cloud
            spring-cloud-starter-gateway
        

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        

    


    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

注意:不需要引入web依赖,否则启动服务会报错。因为gateway内部集成了Netty服务器

二、yml文件配置:

1、写法一:

server:
  port: 8000

spring:
  application:
    name: gateway-server
  cloud:
    # nacos 注册中心
    nacos:
      discovery:
        server-addr: http://localhost:8848
        username: nacos
        password: nacos
    # 动态路由
    gateway:
      discovery:
        locator:
          enabled: true   # 开启服务发现让gateway可以发现注册中心的服务,解析微服务名称为主机名和端口,实现动态路由
          # lowerCaseServiceId: true  # 请求服务是小写的时候改成true(默认为false轻微服务必须是大写)

      # 路线
      routes:
          # 账户模块服务
        - id: seata-account-service         # 路由Id,没有规则限制,但要唯一
          # http方式
          #uri: http://localhost:7000

          # lb方式
          uri: lb://seata-account-service   # 断言成功后提供的路由地址,lb为负载均衡
          predicates:
            - Path=/account/**              # 断言规则,注意需要和 tomcat servlet容器上下文路径对应

          # 订单模块服务
        - id: seata-order-service         # 路由Id,没有规则限制,但要唯一
          uri: lb://seata-order-service   # 断言成功后提供的路由地址,lb为负载均衡
          predicates:
            - Path=/order/**              # 断言规则,注意需要和 tomcat servlet容器上下文路径对应

          # 库存模块服务
        - id: seata-storage-service         # 路由Id,没有规则限制,但要唯一
          uri: lb://seata-storage-service   # 断言成功后提供的路由地址,lb为负载均衡
          predicates:
            - Path=/storage/**              # 断言规则,注意需要和 tomcat servlet容器上下文路径对应

      # 处理跨域请求
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedHeaders: "*"
            allowedOrigins: "*"
            allowCredentials: true
            allowedMethods:
              - GET
              - POST
              - DELETE
              - PUT
              - OPTION

 注意:predicates的断言规则路径需要和服务的 tomcat servlet容器上下文路径对应,否则无法路由

2、写法二(走配置中心):

bootstrap-dev.yml 配置内容:

server:
  port: 6000

spring:
  application:
    name: gateway-server
  cloud:
    # nacos注册、配置中心
    nacos:
      discovery:
        server-addr: http://xxx:8848
        username: nacos
        password: nacos
        namespace: dev
        group: LEARNING
      config:
        server-addr: ${spring.cloud.nacos.discovery.server-addr}
        username: ${spring.cloud.nacos.discovery.username}
        password: ${spring.cloud.nacos.discovery.password}
        namespace: ${spring.cloud.nacos.discovery.namespace}
        file-extension: yml
        extension-configs:
          - data-id: application.yml
            group: GATEWAY-SERVER
            refresh: true

application.yml 配置内容:

server:
  port: 6000

spring:
  application:
    name: gateway-server
  cloud:
    # 动态路由
    gateway:
      discovery:
        locator:
          enabled: true   # 开启服务发现让gateway可以发现注册中心的服务,解析微服务名称为主机名和端口,实现动态路由
          # lowerCaseServiceId: true  # 请求服务是小写的时候改成true(默认为false轻微服务必须是大写)

      # 路线
      routes:
          # mpj服务
        - id: mybatis-plus-join-practice         # 路由Id,没有规则限制,但要唯一
          # http方式
          #uri: http://localhost:7000

          # lb方式
          uri: lb://mybatis-plus-join-practice   # 断言成功后提供的路由地址,lb为负载均衡
          predicates:
            - Path=/mpj/**                       # 断言规则,注意需要和 tomcat servlet容器上下文路径对应

          # provider服务
        - id: rabbitmq-provider         # 路由Id,没有规则限制,但要唯一
          uri: lb://rabbitmq-provider   # 断言成功后提供的路由地址,lb为负载均衡
          predicates:
            - Path=/provider/**         # 断言规则,注意需要和 tomcat servlet容器上下文路径对应

          # consumer服务
        - id: rabbitmq-consumer         # 路由Id,没有规则限制,但要唯一
          uri: lb://rabbitmq-consumer   # 断言成功后提供的路由地址,lb为负载均衡
          predicates:
            - Path=/consumer/**         # 断言规则,注意需要和 tomcat servlet容器上下文路径对应

      # 处理跨域请求
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedHeaders: "*"
            allowedOrigins: "*"
            allowCredentials: true
            allowedMethods:
              - GET
              - POST
              - DELETE
              - PUT
              - OPTION

注意:
1、predicates 的断言规则路径需要和服务的 tomcat servlet容器上下文路径对应,否则无法路由
2、predicates 路由匹配成功后,转发地址 uri 支持 http、lb 写法
3、一般常用 lb 转发方式,lb 为负载均衡,默认为轮询策略
4、特别注意,使用 lb 方式的前提是本网关服务和 lb 路由的服务必须在同一命名空间、同一分组下,否则无法路由

你可能感兴趣的:(SpringCloud,Alibaba,spring,cloud,alibaba)