0
点赞
收藏
分享

微信扫一扫

SpringCloud-Gateway 网关

  • Route(路由):路由是网关的基本单元,由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发。
  • Predicate(谓语、断言):路由转发的判断条件,目前SpringCloud Gateway支持多种方式,常见如:Path、Query、Method、Header等。
  • Filter(过滤器):过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容。
  • route的组成部分 id:路由的ID uri:匹配路由的转发地址 predicates:配置该路由的断言,通过PredicateDefinition类进行接收配置。 order:路由的优先级,数字越小,优先级越高。

Gateway

  • 官方地址
//yml
spring:
  cloud:
    gateway:
      routes:
        - id: baidu_route
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu

        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq
   
//bootstrap.properties                     
spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#配置空间
spring.cloud.nacos.config.namespace=09765b91-4303-4f83-b962-7b0a10348c3d
#配置分组     

//application.properties
spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
server.port=88       

不需要数据库

//排除包
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

配置网关

1.// 修改 api接口请求地址 
  window.SITE_CONFIG['baseUrl'] = 'http://localhost:88';
2.在renren-fast中 引入gulimall-common包
3.在application.yml中配置名称 和nacos地址
spring
application:
  name: renren-fast
cloud:
  nacos:
    server-addr: 127.0.0.1:8848
在 RenrenApplication 开启注册发现 @EnableDiscoveryClient    
4.在nacos 服务管理-服务列表中能发现    renren-fast 已经上线
5.将所有请求 发给网关gulimall-gateway 配置application.yml
        - id: admin_route
#           路由地址 lb负债均衡
          uri: lb://renren-fast
#           断言
          predicates:
            - Path=/api/**
#            重写访问路径
          filters:
            - RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}
6.处理跨域报错has been blocked by CORS ---
check: No 'Access-Control-Allow-Origin' 
7.配置跨域
@Configuration //配置spring并启动spring容器
public class CORSFilter {
    @Bean //加入容器中
    public CorsWebFilter corsWebFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
//       配置跨域
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.setAllowCredentials(true);
        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsWebFilter(source);
    }
}

解决gulimall-product 路由问题

1.在gulimall-gateway的application.yml中配置(*注 放在 admin_route 防止被路由走)
- id: product_route
  uri: lb://gulimall-product
  predicates:
    - Path=/api/product/**
  filters:
    - RewritePath=/api/(?<segment>.*),/$\{segment}
2.配置gulimall-product bootstrap.properties 添加nacos 命名空间    
spring.application.name=gulimall-product
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=61d7324e-8cb0-4c84-a874-313ab76be69a
3.给GulimallProductApplication 注册发下@EnableDiscoveryClient
spring:
  cloud:
    gateway:
      routes:
#        - id: baidu_route
#          uri: https://www.baidu.com
#          predicates:
#            - Query=url,baidu
#
#        - id: qq_route
#          uri: https://www.qq.com
#          predicates:
#            - Query=url,qq

        - id: product_route
          uri: lb://gulimall-product
          predicates:
            - Path=/api/product/**,/hello
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}

        - id: third_party_route
          uri: lb://gulimall-third-party
          predicates:
            - Path=/api/thirdparty/**
          filters:
            - RewritePath=/api/thirdparty(?<segment>.*),/$\{segment}

        - id: member_route
          uri: lb://gulimall-member
          predicates:
            - Path=/api/member/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}

        - id: ware_route
          uri: lb://gulimall-ware
          predicates:
            - Path=/api/ware/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}


        - id: admin_route
#           路由地址 lb负债均衡
          uri: lb://renren-fast
#           断言
          predicates:
            - Path=/api/**
#            重写访问路径
          filters:
            - RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}


        - id: gulimall_host_route
          uri: lb://gulimall-product
          predicates:
            - Host=gulimall.com,item.gulimall.com

        - id: gulimall_search_route
          uri: lb://gulimall-search
          predicates:
            - Host=search.gulimall.com

        - id: gulimall_auth_route
          uri: lb://gulimall-auth-server
          predicates:
            - Host=auth.gulimall.com

        - id: gulimall_cart_route
          uri: lb://gulimall-cart
          predicates:
            - Host=cart.gulimall.com

        - id: gulimall_order_route
          uri: lb://gulimall-order
          predicates:
            - Host=order.gulimall.com
举报

相关推荐

0 条评论