SpringCloud 2021.0.013、路由网关Gateway:入门案例 (spring-boot 2.6.3)
1)新建 Gateway 模块
springcloud-gateway-9999
2)导jar包
网关服务也需要注册到注册中心,所以需要
eureka-client
包;这两个包都已集成在父工程
spring-cloud-build
中,不需要版本号
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- spring-cloud-starter-gateway -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<!-- <version>3.1.0</version>-->
</dependency>
3)配置 application.yml
- 网关服务端口
server:
port: 9999
- 网关 gateway 配置
spring:
application:
# 网关应用名称
name: springcloud-gatewey-9999
# 配置 Spring Cloud 相关属性
cloud:
# 配置 Spring Cloud Gateway 相关属性
gateway:
# 配置网关发现机制
discovery:
# 配置处理机制
locator:
# ----------------
# 只要请求地址符合规则:http://网关地址:端口/微服务名称/微服务请求地址,就自动映射
# 把请求转发到:http://微服务提供者地址:端口/微服务名称/微服务请求地址
# ----------------
# 开启网关自动映射处理机制
# 商业开发中,一般不设置为 true,使用默认值 false;避免不必要的自动转发规则
enabled: true
-
eureka 配置
和服务提供者的配置一样
# 配置 Eureka
eureka:
client:
service-url:
# 注册中心地址
defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/,http://localhost:7003/eureka/
instance:
# 修改Eureka上的默认描述信息
instance-id: springcloud-gatewey-9999
# 以IP地址注册到服务中心
prefer-ip-address: true
- 完整 yml
server:
port: 9999
spring:
application:
# 网关应用名称
name: springcloud-gatewey-9999
# 配置 Spring Cloud 相关属性
cloud:
# 配置 Spring Cloud Gateway 相关属性
gateway:
# 配置网关发现机制
discovery:
# 配置处理机制
locator:
# ----------------
# 只要请求地址符合规则:http://网关地址:端口/微服务名称/微服务请求地址,就自动映射
# 把请求转发到:http://微服务提供者地址:端口/微服务名称/微服务请求地址
# ----------------
# 开启网关自动映射处理机制
# 商业开发中,一般不设置为 true,使用默认值 false;避免不必要的自动转发规则
enabled: true
# 配置 Eureka
eureka:
client:
service-url:
# 注册中心地址
defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/,http://localhost:7003/eureka/
instance:
# 修改Eureka上的默认描述信息
instance-id: springcloud-gatewey-9999
# 以IP地址注册到服务中心
prefer-ip-address: true
4)主启动类
不需要添加额外的注解
@SpringBootApplication
public class GateWay_9999 {
public static void main(String[] args) {
SpringApplication.run(GateWay_9999.class,args);
}
}
5)测试
依次启动 注册中心、服务提供者、网关
注册中心
服务提供者
网关
6)开启服务名称小写转换
lower-case-service-id: true
默认为false
spring:
application:
# ....
cloud:
gateway:
discovery:
locator:
enabled: true
# 开启服务名称小写转换(默认为false)
lower-case-service-id: true
7)配置完整路由
spring:
application:
# 省略...
cloud:
gateway:
discovery:
# 省略...
# 配置网关中的一个完整路由:
# 包含:命名、地址、谓词集合(规则)、过滤器集合
routes:
# 路由定义中的命名,唯一即可;符合Java中的变量命名规则
- id: myDept
# 微服务转发地址;lb: 表示负载均衡 loadbalance
# lb:// 后面为服务名;如果上面开启了小写转换,就用小写;如果没有开启(默认false),就在注册中心查看,一般为大写
uri: lb://springcloud-provider-dept
# -----------------
# 谓词;命名是有套路的;
# Predicate 断定式接口
# 是 GatewayPredicate 接口实现类的命名前缀;格式:xxxRoutePredicateFactory
# 如:PathRoutePredicateFactory,名字即为:Path
predicates:
# predicates 是 List 集合;List<PredicateDefinition>
# -----------------------------------------------------
# PredicateDefinition 是 List 集合中的元素;包含 name、args (其中args是一个map)
# Path 对应于 PathRoutePredicateFactory
- name: Path
args:
# Map 键值对
# -----------------------
# 键(patterns) 值(List集合)
# -----------------------
# 写法1(单个元素)
#patterns: /spd/**
# -----------------------
# List值中有多个元素
# 写法2(多个元素)
#patterns: [/spd/**,/abc/**] #行内写法
# -----------------------
# 写法3(多个元素)
patterns: #多行写法
- /spd/**
- /abc/**
# 如果 predicates 集合中只有一个元素,等价于下面的写法:谓词名称=参数
#- Path=/spd/**
# ---------------------------------------------------
# 这个 predicates 的配置表示请求服务的路径是否符合规则
# http://网关地址:端口/spd/**
# ---------------------------------------------------
# -----------------------------------------------------
# 过滤器配置
filters:
# 过滤转发地址前缀;过滤掉1节
# ---------过滤器解析---------
# 如果 predicates 规则成立 (true),即请求路径的格式为:
# http://网关地址:端口/spd/**
# 那么向注册中心转发的地址应该是:http://注册中心地址:端口/服务名/spd/**
# 此时过滤掉第1节,即去掉/spd
# 实际转发的地址为:http://注册中心地址:端口/服务名/**
# ---------------------------
- name: StripPrefix
args:
# 过滤掉第1节
parts: 1
# 如果 filters 集合中只有一个元素,等价于下面的写法:过滤器名称=参数
#- StripPrefix=1
注意此处有一个小坑:routes下的uri中服务名 uri: lb://springcloud-provider-dept
,用减号符-
,不要用下划线_
routes、predicates、filters 都是 List 集合
如何查找 args 中键的名称
predicates、filters 的几种配置方法:效果等价
filters 类似
8)关闭自动映射
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggcbkh
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01