服务网关
编辑
没有服务网关
问题:地址太多|安全性|管理问题
访问商品服务
http://ip地址:9001/goods/findAll
访问广告服务
http://ip地址:9002/brand/findAll
访问用户服务
http://ip地址:9003/user/findAll
在有网关的情况下,我们配置网关端口号为4006,在访问服务是我们可以通过访问网关进而访问服务,此时端口号访问时都为4006,方便了很多,尤其是前端做跨域配置
访问商品服务
http://ip地址:4006/goods/findAll
访问广告服务
http://ip地址:4006/brand/findAll
访问用户服务
http://ip地址:4006/user/findAll
Spring Cloud Gateway
Spring Cloud Gateway
Spring Cloud Gateway 是 Spring Cloud生态系统中的网关,它是基于Spring 5.0、SpringBoot 2.0和Project Reactor等技术开发的,旨在为微服务架构提供一种简单有效的、统一的API路由管理方式,并为微服务架构提供安全、监控、指标和弹性等功能。其目标是替代Zuul
路由(Route)
是网关的基本构建块。由一个ID、一个目标URI、一组断言和一组过滤器定义。若断言为真,则路由匹配
断言(predicate)
输入类型是一个ServerWebExchange。我们可以使用它来匹配来自HTTP请求的任何内容
过滤(filter)
可以在请求被路由前或者之后对请求进行修改。
搭建网关
在父项目中,创建网关模块,创建的是maven项目
pom.xml依赖配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>cloud-my</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-gateway</artifactId> <dependencies> <!-- Gateway--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <!-- Eureka client--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.22</version> </dependency> </dependencies> </project>
主启动类
@SpringBootApplication @EnableEurekaClient public class GateWay9527 { public static void main(String[] args) { SpringApplication.run(GateWay9527.class,args); } }
bootstartp.yml
server: port: 9527 eureka: client: service-url: # Eureka server 地址 defaultZone: http://localhost:7001/eureka/ spring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: false #不开启服务注册和发现的功能 lower-case-service-id: true #请求路径上的服务名称转换为小写 #路由配置 #id:路由id,没有固定规则但要求唯一,,不重复即可 #uri:提供服务的路由地址,如http://localhost:80|协议lb,后面名称为应用名,表示启用Gateway的负载均衡的功能,如lb://cloud-eureka-pro #predicates:断言 routes: #cloud-eureka-pro - id: cloud-eureka-pro80 uri: http://localhost:80 predicates: - Path=/eureka80/** globalcors: # 解决options请求被拦截问题 add-to-simple-url-handler-mapping: true cors-configurations: # 拦截的请求 '[/**]': # 是否允许携带cookie allowCredentials: true #允许哪些网站的跨域请求 "*"允许所有网站 #allowedOrigins: "*" # spring boot2.4以前的配置 allowedOriginPatterns: "*" # spring boot2.4以后的配置 #允许跨域的ajax的请求方式 allowedMethods: "*" # 允许请求中携带的头信息 allowedHeaders: "*" # 跨域检测的有效期,单位s maxAge: 36000 logging: pattern: console: '%d{MM/dd HH:mm:ss.SSS} %clr(%-5level) --- [%-15thread] %cyan(%-50logger{50}):%msg%n'