由上图可知 当没有使用网管时每个模块都得去考虑权限控制,限流,网路访问一系列问题,影响性能
此时我们可以将这些问题统一的集成到网关当中,由网关统一处理处理完毕在把请求转发对应模块
我们在使用网关的时候需要做一个反向代理由于zuul并发量大,此时必须给zuul配置集群一同注册到eureka server上此时nginx就可以通过反向代理得到使用zuul网关由于某些微服务涉及到权限等鉴权问题我们可以将鉴权auth(非业务逻辑)打包到一起生成一个项目放到server上,此时zuul网关在调用时预先调用auth服务过滤掉不符合规范的请求 此时业务层的微服务就不用调用auth相关的问题 当符合auth规范的请求zuul会通过路由将其转发到对应的微服务当中
zuul服务搭建
相比于其他客户端来说 zuul也是一个客户端也需要注册到server上去
maven地址
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cx</groupId>
<artifactId>spring-cloud-zuul</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-cloud-zuul</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR7</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${
spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
yml
server:
port: 5000
spring:
application:
name: zuul-gateway
eureka:
## 表示为Erureka客户端
client:
## 单台server为服务器不需要注册到服务器上
register-with-eureka: true
## 获取注册列表的信息 道理同上 基本两者参数是一样的
fetch-registry: true
service-url: # Eureka服务提供地址
defaultZone: http://node1:10097/eureka/
zuul: # 配置网关路由
routes:
eureka-client-api:
path: /eureka-client-api/** #当/eureka-client-api 开头的他会将其转发给eureka-client
service-id: eureka-client
feign-client-api:
path: /eureka-feign-api/** #同上
service-id: feign-client
启动类
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy //开启网关代理
public class SpringCloudZuulApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudZuulApplication.class, args);
}
}
此时zuul项目搭建成功
依次启动server client feign zuul 项目
之前项目启动访问client项目时访问的地址为http://localhost:9091/info
此时我们可以在浏览器访问
http://localhost:5000/eureka-client-api/info
同理feign也是一样
此时网关就为我们分发了路由但是此时我们如果访问原先地址直接跳过zuul网关也可以访问,此时是不安全的此时我们可以在yml配置文件进行配置响应预防操作