搭建Gateway网关

2022-02-17  本文已影响0人  侧耳倾听y

1. 添加依赖


<dependencies>
    <!-- Gateway正经依赖 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    
    <!-- Nacos服务发现 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>

</dependencies>

2. 配置文件

server:
  port: 30000
spring:
  application:
    name: gateway
  cloud:
    nacos:
      # Nacos配置项
      discovery:
        server-addr: localhost:8848
        heart-beat-interval: 5000
        heart-beat-timeout: 15000
        cluster-name: Cluster-A
        namespace: dev
        group: myGroup
        register-enabled: true
    gateway:
      discovery:
        locator:
          # 创建默认路由,以"/服务名称/接口地址"的格式规则进行转发
          # Nacos服务名称本来就是小写,但Eureka默认大写
          enabled: true
          lower-case-service-id: true
      # 跨域配置
      globalcors:
        cors-configurations:
          '[/**]':
            # 授信地址列表
            allowed-origins:
              - "http://localhost:8808"
            # cookie, authorization认证信息
            expose-headers: "*"
            allowed-methods: "*"
            allow-credentials: true
            allowed-headers: "*"
            # 浏览器缓存时间
            max-age: 1000          

此处注意跨域配置中的几个参数的含义。

参数 含义
allowed-origins 可以被信任的来源地址list
expose-headers Response Hearder 中可以被暴露的Header
allowed-methods 支持跨域的Http Method
allowed-credentials 跨域请求默认不带cookie
allowed-headers 允许接收的Request Header 属性

3. 定义路由规则

声明路由有三种方式,分别是JAVA代码、配置文件、和动态路由,此处使用JAVA代码声明


@Configuration
public class RoutesConfiguration {

    @Bean
    public RouteLocator declare(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(route -> route
                        .path("/gateway/manage/**")
                      // stripPrefix 过滤器,将 path 访问路径中的第一个前置子路径删除掉
                        .filters(f -> f.stripPrefix(1))
                      // lb会负载均衡,后面是在nacos注册的服务名称
                        .uri("lb://manage-serv")
                )
            ).build();
    }
}

添加一个项目启动的类,启动之后,就可以作为一个网关了。

上一篇 下一篇

猜你喜欢

热点阅读