API网关,能替换Zuul。比Zuul强大。
优点:
性能强劲:是第一代网关Zuul的1.6倍;
功能强大:内置了很多实用的功能,例如转发、监控、限流等;
设计优雅,容易扩展;
缺点:
其实现依赖Netty与WebFlux,不是传统的Servlet模型,学习成本高;
不能将其部署在Tomcat、Jetty等Servlet容器中,只能打成jar包运行;
需要SpringBoot2.0及以上版本;
使用:
引入依赖:
<!-- gateway 注意:此模块不能引入starter-web -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
启动类:
@SpringBootApplication
public class ShopGateWay {
public static void main(String[] args) {
SpringApplication.run(ShopGateWay.class,args);
}
}
配置文件:
server:
port: 7000
spring:
application:
name: api-gateway
cloud:
#网关配置
gateway:
routes: #路由数组,可配置多个 【路由就是指当请求满足什么样的条件的时候转发到哪个服务】
- id: product_route #当前路由的标识,唯一
uri: http://127.0.0.1:8081 #请求最终要被转发到的地址
order: 1 #路由的优先级,数字越小优先级越高
predicates: #断言(条件判断,返回值是boolean 转发请求要满足的条件)
- Path=/product-serv/** #当请求路径满足Path指定的规则时,此路由信息才会正常转发
filters: #过滤器(在请求传递过程中,对请求进行操作)
- StripPrefix=1 #在请求转发之前去掉一层前缀路径 /product-serv/** --》**
#metadata: #元数据
到此即可完成基本的gateway使用。
从Nacos中获取服务信息
上述配置中,配置文件以硬编码的方式将目标uri写死固定,非常不方便。
所以要从Nacos中获取服务信息。
步骤:
引入nacos依赖: