一)什么是微服务中的网关
1.微服务中的zuul
zuul是SpringCloud中的一个路由组件,我们可以使用的zuul对外提供一个统一的入口访问我们提供的Provider,看上去zuul很像Customer,但是不然,其实我们可以将zuul理解成一个的门户,它为是web应用所有服务请求的前门,用户的请求经过网关,在进行对服务的消费
2.为什么需要网关
第一:我们知道我们要进入一个服务本身,很明显我们没有特别好的办法,直接输入IP地址+端口号,我们知道这样的做法很糟糕的,这样的做法大有问题,首先暴露了我们实体机器的IP地址,别人一看你的IP地址就知道服务部署在哪里,让别人很方便的进行攻击操作。
第二:我们这么多服务,我们是不是要挨个调用它呀,我们这里假设做了个权限认证,我们每一个客户访问的都是跑在不同机器上的不同的JVM上的服务程序,我们每一个服务都需要一个服务认证,这样做烦不烦呀,明显是很烦的。
第三:没有网关我设计起来的网站模式是Customer直接调用Provider,这样我们会发现,客户端和服务之间耦合度太大。
3.使用网关解决的问题
1.服务IP地址暴露问题,统一入口,我们通过网关为微服务提供统一的入口,网关起到外部和内部的隔离(Customer和Provider的隔离),保持后台服务的安全性
2.鉴权校验:识别请求的权限,拒绝不符合要求的请求
3.动态路由:动态的将请求路由到指定的服务上
4.减少客户端和服务端耦合度,服务可以独立的发展,通过网关完成映射。
二)zuul的入门案例
1.创建项目
2.使用zuul进行网关服务的时候需要基本的三个的坐标
1)web启动器
2)EurekaClient(因为Zuul也是一个服务需要在注册中心内注册)
3)zuul
3.pom文件
<?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.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.sxt</groupId>
<artifactId>6-zuul-proxy</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>6-zuul-proxy</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</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>
</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>
4.修改启动类
1.在启动类上添加一个重要的注解@EnableZuulProxy注解用于开启网关代理服务
@SpringBootApplication
@EnableZuulProxy //开启网关代理
public class Application
{
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}
}
5.修改全局配置文件
spring.application.name=6-zuul-proxy
server.port=9020
eureka.client.service-url.defaultZone=http://peer1:8081/eureka/,http://peer2:8082/eureka/,http://peer3:8083/eureka/
6.启动服务进行网关的测试
1)直接访问数据是没有问题的
2)启动网关服务
服务在中心已经注册成功了
3)如何通过网关进行服务的访问呢?
很简单使用网关的url+服务的名字+访问的地址
也是能访问到数据的。
http://localhost:9020/1-e-product-provider/product/selectAllProduct