服务网关可以理解为医院的分诊台,控制请求可不可以进来,进到哪里,之前是使用Zuul网关,但是Zuul2一直跳票所以Spring官方基于webFlux框架开发了Geteway,稳定性更好,支持异步非阻塞 ,可以实现反向代理,熔断,监控等功能
项目创建
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
单Gateway配置实例
server.port=9010
spring.application.name=geteway
# 路由ID,命名要转发到的服务
spring.cloud.gateway.routes[0].id=order_route
# 路由地址,需要转发到什么地方
spring.cloud.gateway.routes[0].uri=http://localhost:9001
# 断言规则,将带有order-service的请求转发
spring.cloud.gateway.routes[0].predicates[0]=Path=/order-service/**
# 过滤转发后中的地址带order-service关键字
spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1
这里只做测试用,转发地址写死,不利于维护,需要集成Nacos
集成Nacos
依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置
server.port=9010
spring.application.name=geteway
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 路由ID,命名要转发到的服务
spring.cloud.gateway.routes[0].id=order_route
# 路由地址,需要转发到什么地方 lb:使用本地负载均衡策略
spring.cloud.gateway.routes[0].uri=lb://order-service
# 断言规则,将带有order-service的请求转发
spring.cloud.gateway.routes[0].predicates[0]=Path=/order-service/**
# 过滤转发后中的地址带order-service关键字
spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1
也可以只用服务名方式,减少配置,但是不推荐,功能不全
# 简写方式,使用服务名作为转发
spring.cloud.gateway.discovery.locator.enabled=true