紧接上回 创建一个gateway的项目
不用添加任何类
yml文件书写:
#bootstrap.yml文件
spring:
cloud:
## Nacos认证信息
nacos:
config:
username: nacos
password: nacos
context-path: /nacos
server-addr: localhost:8848 # 设置配置中心服务端地址
namespace: # Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
server-addr: localhost:8848
====================================================================================
#application.yml文件
server:
port: 9527
spring:
application:
name: springcloudAlibaba-gateway-9527
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
listener:
simple:
default-requeue-rejected: false #被拒绝后是否重新入队
acknowledge-mode: manual #手动应答
cloud:
sentinel:
transport:
dashboard: localhost:8858 #sentinel服务器的位置
port: 8719 #port是在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。
#比如 Sentinel 控制台添加了1个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。
alibaba:
seata:
tx-service-group: service-gateway-group
gateway:
discovery:
locator:
enabled: true
lower-case-service-id: true # 请求服务是小写的时候改成true(默认为false时微服务必须是大写)
routes:
- id: provider
uri: lb://nacos-provider # 服务端 service_id
predicates:
- Path=/user/**
filters:
- StripPrefix=1 # 转发过滤前缀个数 就是上面的path中 为1 就过滤掉user这一个 再把后面的转发给其他服务器
seata:
application-id: ${spring.application.name}
tx-service-group: service-gateway-group
service:
grouplist:
seata-server: localhost:。。。。
registry:
type: nacos
nacos:
server-addr: localhost:8848
config:
type: nacos
nacos:
server-addr: localhost:8848
feign:
sentinel:
enabled: true
management:
endpoint:
web:
exposure:
include: '*'
pom文件:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--Snetinel 依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!--SpringCloud ailibaba sentinel-datasource-nacos 后续做持久化用到-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
<!--引入 seata 依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--引入 OpenFeign 的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
</dependencies>
访问:http://localhost:9527/user/serverport
配置了filters:
- StripPrefix=1
他向我们的nacos-provider发送的请求为 http://locccalhost:9527/serverport
gateway的简单流程:
1.调用ConfigurationProperties注解生成我们的配置对象:
2.调用对应的AbstractRoutePredicateFactory生成的子类来测试我们的输入是否合理,就是下图predicates中的内容是否合理
3.网关过滤器(GatewayFilter),路径过滤器可以实现URL重写,通过重写URL可以实现隐藏实际路径提高安全性,易于用户记忆和输入,易于被搜索引擎收录等优点。
就是我们的配置文件中filter中的内容
4.全局过滤器(GlobalFilter),主要做了请求的转发和负载均衡等功能的实现 它不用配置,会直接作用与所有的配置中。