10.使用gateway作为服务网关的简单配置
文章目录gateway 简介1. gateway 的简单配置使用1. 入门配置1. 新建Model2. 修改pom文件3. 配置yml文件4. 启动类5. 测试是否成功2. 结合注册中心使用gateway1. pom文件2. yml文件3. 测试是否成功3. 简化版配置1. yml 文件2. 测试是否成功gateway 简介Spring Cloud Gateway是Spring Cloud体系的第
文章目录
gateway 简介
Spring Cloud Gateway是Spring Cloud体系的第二代网关组件,基于Spring 5.0的新特性WebFlux进行开发,底层网络通信框架使用的是Netty,所以其吞吐量高、性能强劲,未来将会取代第一代的网关组件Zuul。Spring Cloud Gateway可以通过服务发现组件自动转发请求,默认集成了Ribbon做负载均衡,以及默认使用Hystrix对网关进行保护,当然也可以选择其他的容错组件,例如Sentinel
优点:
- 性能强劲:是第一代网关Zuul的1.6倍
- 功能强大:内置了很多实用的功能,例如转发、监控、限流等
- 设计优雅,容易扩展
缺点:
- 其实现依赖Netty与WebFlux,不是传统的Servlet编程模型,有一定的学习成本
- 不能在Servlet容器下工作,也不能构建成WAR包,即不能将其部署在Tomcat、Jetty等Servlet容器里,只能打成jar包执行
- 不支持Spring Boot 1.x,需2.0及更高的版本
1. gateway 的简单配置使用
1. 入门配置
需要4步:
- 新建model
- 修改pom文件
- 配置yml文件
- 启动类
1. 新建Model
这个没什么好说的了,新建一个普通的maven的model 即可
2. 修改pom文件
pom文件是基于父子工程来做的,微服务一般都是基于父子工程来做的。
在pom文件中添加 gateway 的依赖
注意: 不要在pom中添加 spring-boot-starter-web 的依赖。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
版本号已经在父项目中规定了:参见:https://blog.csdn.net/weixin_43852058/article/details/110670923
3. 配置yml文件
在yml文件中配置 gateway 的 路由规则,可以路由到哪些地址等信息
spring:
cloud:
gateway:
routes:
- id: shop-product # 路由的唯一标识
uri: http://localhost:8081 # 如果断言成功,将要转发去的地址
order: 0 # 优先级,越小优先级越高
predicates: # 断言,满足所有断言,才会进行转发
- Path=/product/** # 注意:这是使用= 不是:
- id: shop-order
uri: http://localhost:8091
order: 0
predicates:
- Path=/order/**
server:
# 指定服务器的端口号
port: 9000
4. 启动类
maven项目没有springboot的启动类,需要自己新建,新建的时候注意以下,至少先建立两层包目录,防止出现一些意料之外的问题,养成习惯。
@SpringBootApplication
public class GatewayApp {
public static void main(String[] args) {
SpringApplication.run(GatewayApp.class, args);
}
}
5. 测试是否成功
做完上边几步就已经配置完成了,下边在浏览器中输入网关的地址,加上想要访问的服务的路径,就可以访问到想要访问的资源了。
这里应该已经可以感受到网关的作用了,网关就是帮你找到你想要的资源。
2. 结合注册中心使用gateway
在yml中直接写死绑定的uri当然是不好的方法,而且服务间的通信如果多了,使用gateway的时候你就需要记住非常多的地址,端口,使用不太方便,这时候可以配合注册中心一起使用
配合注册中心使用需要两步就可以搞定:
- 修改pom文件
- 修改yml文件
1. pom文件
在pom中引入注册中心的依赖,这里以 eureka 为例,nacos同理
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2. yml文件
在yml文件中修改配置,配置注册中心,在转发给远程服务的时候,地址需要进行改变。
# 配置 eureka 注册中心
eureka:
client:
register-with-eureka: false # 不在注册中心注册
fetch-registry: true # 需要从注册中心拉取服务
service-url: # 注册中心的地址
defaultZone: http://localhost:7001/eureka/
spring:
cloud:
gateway:
routes:
- id: shop-product # 路由的唯一标识
# 这里的地址需要使用 lb://服务名的方式进行转发
uri: lb://shop-product # 如果断言成功,将要转发去的地址
order: 0 # 优先级,越小优先级越高
predicates: # 断言,满足所有断言,才会进行转发
- Path=/product/** # 注意:这是使用= 不是:
- id: shop-order
uri: lb://shop-order
order: 0
predicates:
- Path=/order/**
application:
name: shop-gateway
注意: 在配置gateway的时候,uri的地址需要使用 lb://服务名 的方式进行配置。lb 是 LoadBalance 的意思,也就是负载均衡的意思。
使用网关模式的话,网关是带有负载均衡的(Eureka 和 nacos 集成了Ribbon)
Ribbon的简单使用参考:4. 使用Ribbon实现客户端负载均衡
3. 测试是否成功
在浏览器中输入 http://网关ip:网关端口/资源路径 进行测试,如果显示出目标资源,就是配置成功
3. 简化版配置
有人说,微服务多的话,我这yml里边岂不是要配置很多东西,有点烦人啊,gateway还提供一种简化版的配置,可以在yml中不配置route。但是在访问的时候,对url路径有一定的要求。
具体是什么要求,到后边再说,先看配置吧
1. yml 文件
在yml中开启自动定位
spring:
application:
name: shop-gateway
cloud:
gateway:
discovery:
# 定位器
locator:
enabled: true
2. 测试是否成功
在浏览器中输入:http://网关ip:网关端口/服务名/资源(接口)路径 进行访问
注意: 使用这种方式的时候,请求路径一定要遵循这个规则: http://网关ip:网关端口/服务名/资源(接口)路径
再次注意: 使用Eureka 做完注册中心的时候,注册的服务名称会默认转换为 全大写,使用的时候一定要注意。
更多推荐



所有评论(0)