Sringcloud gateway
1.作用
实现负载均衡
熔断降级
路径重写
限流保护
统一鉴权
跨域: 添加了网关之后就不用再添加@crossOrigin注解了, 如果再次添加会有两次跨域造成跨域失败.
2.使用方法
一、在项目中创一个子模块(微服务模块)
二、在项目中引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--gson-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<!--服务调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
三、将gateway网关服务和其他微服务都在nacos注册中心进行注册
四、编写配置文件
# 服务端口
server.port=8666
##在nacos中进行服务注册
spring.application.name=service-gateway
#nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#使用服务发现路由
spring.cloud.gateway.discovery.locator.enabled=true
#服务路由名小写
#spring.cloud.gateway.discovery.locator.lower-case-service-id=true
#设置路由id
spring.cloud.gateway.routes[0].id=service-acl
#设置路由的uri lb://nacos注册服务名称=properties里的服务名
spring.cloud.gateway.routes[0].uri=lb://service-acl
#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[0].predicates= Path=/*/acl/**
#配置service-edu服务
spring.cloud.gateway.routes[1].id=service-edu
spring.cloud.gateway.routes[1].uri=lb://service-edu
spring.cloud.gateway.routes[1].predicates= Path=/eduservice/**
#配置service-ucenter服务
spring.cloud.gateway.routes[2].id=service-ucenter
spring.cloud.gateway.routes[2].uri=lb://service-ucenter
spring.cloud.gateway.routes[2].predicates= Path=/eduucenter/**
#配置service-ucenter服务
spring.cloud.gateway.routes[3].id=service-cms
spring.cloud.gateway.routes[3].uri=lb://service-cms
spring.cloud.gateway.routes[3].predicates= Path=/educms/**
spring.cloud.gateway.routes[4].id=service-msm
spring.cloud.gateway.routes[4].uri=lb://service-msm
spring.cloud.gateway.routes[4].predicates= Path=/edumsm/**
spring.cloud.gateway.routes[5].id=service-order
spring.cloud.gateway.routes[5].uri=lb://service-order
spring.cloud.gateway.routes[5].predicates= Path=/eduorder/**
spring.cloud.gateway.routes[6].id=service-oss
spring.cloud.gateway.routes[6].uri=lb://service-oss
spring.cloud.gateway.routes[6].predicates= Path=/eduoss/**
spring.cloud.gateway.routes[7].id=service-oss
spring.cloud.gateway.routes[7].uri=lb://service-oss
spring.cloud.gateway.routes[7].predicates= Path=/eduoss/**
spring.cloud.gateway.routes[8].id=service-sta
spring.cloud.gateway.routes[8].uri=lb://service-sta
spring.cloud.gateway.routes[8].predicates= Path=/edusta/**
spring.cloud.gateway.routes[9].id=service-vod
spring.cloud.gateway.routes[9].uri=lb://service-vod
spring.cloud.gateway.routes[9].predicates= Path=/eduvod/**
3.gateway对请求进行处理的过程
首先对请求根据url进行映射,将请求映射到对应的处理器,然后调用对应处理器对请求进行处理,然后对请求进行一层层过滤
4.一些概念
1.路由: 不同的服务有不同的ip地址和url,就相当于一个菜单
2.断言: 服务的url和端口的匹配规则, 比如"edu/service"匹配到8001端口
3.过滤器,统一对请求进行过滤处理
5.创建配置类处理跨域问题
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedMethod("");
config.addAllowedOrigin("");
config.addAllowedHeader("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);