17.0、springcloud-Zuul-路由网关 以及 Zull整合Eureka
什么是Zuul?
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。
Zuul 和 Eureka 进行整合,将 Zuul 自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取其他微服务的消息,即以后访问的微服务都是通过 Zuul 跳转后获得的
【注意】:Zuul 服务最终还是会注册进 Eureka
提供:注册 + 路由 + 过滤 三大功能!
Zuul能干嘛?
·路由
·过滤
那我们接下来看看如何实现路由网关
第一步:创建一个 新maven项目 springcloud-zuul-9527 , 然后导入相关依赖,如下:
<!--zuul依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!--Hystrix依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.hkl</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
第二步:配置application.ymal文件:
server:
port: 9527
#微服务注册的名字
spring:
application:
name: springcloud-zuul
#把zuul配置到Eureka中
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/,http://localhost:7003/eureka/
instance:
instance-id: zuul9527.com
# 设置为true可以显示ip
prefer-ip-address: true
第三步:创建主启动类 ZuulApplication.java ,并添加@EnableZuulProxy注解 开启 zuul 功能
package com.hkl.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication_9527 {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication_9527.class,args);
}
}
OK,配置完这些之后,依次开启:eureka注册中心、服务提供者、路由网关【这些环境搭建在之前的文章里有说】
然后访问查看注册中心要确定两个服务都注册进来了
然后去访问一下服务:http://localhost:8001/dept/get/1
如下图所示:

没有加路由网关之前,访问完服务之后,会将服务的真实端口暴露出来,十分危险
再来看看加了路由网关之后,如何访问:
加了之后访问如下【注意这里访问的是 路由端口9527 而不是真正服务的端口】:
http://localhost:9527/springcloud-provider-dept/dept/get/1

可以看到加了路由网关之后,再次访问相同的服务,则不需要暴露真实的服务端口,而是去访问:路由端口 + 服务的名称 即可访问服务。这样不会将服务的真实端口暴露出来,大大提高了安全性。
但是又发现了一个问题:虽然不会暴露服务端口了,但是却暴露了服务的名字,所以接下来我们来把服务的名字也给隐藏掉,并且让他无法通过服务的名字来访问
第一步:在路由网关模块的application.yaml中加上:
#路由网关的配置
zuul:
routes:
mydept.serviceId: springcloud-provider-dept #注意这里配置的是服务的名字,不能乱写,不然无法访问到对应的服务
mydept.path: /mydept/**
ignored-services: springcloud-provider-dept #不能再使用者路径访问了,ignored:会忽略掉了这个请求
【注意】mydept.serviceId这里配置的是服务的名字,不能乱写,不然无法访问到对应的服务
第二步:接下来访问http://localhost:9527/mydept/dept/get/1
成功访问,如下所示:

在application.yaml中配置了 mydept.path: /mydept/** 之后,就可以通过路由端口9527且不加上项目的名称,也能访问服务了。
测试了一下用服务名字访问,由于配置了 ignored-services 的原因,已经无法访问了
这样做的好处就是:在url请求中,用户看不到任何有关服务的有用信息了
但是一般在真实的开发项目中我们会这样配置,如下:
#路由网关的配置
zuul:
routes:
mydept.serviceId: springcloud-provider-dept#注意这里配置的是服务的名字,不能乱写,不然无法访问到对应的服务
mydept.path: /mydept/**
ignored-services: "*" #不能再使用者路径访问了,ignored:会忽略掉了这个请求
prefix: /hkl #设置公共的前缀
ignored-services 这里会配置通配符 *
prefix: /hkl 真实开发中可能会有多个路由网关,所以会配置前缀
加了前缀之后要访问服务就得在mydept前再加上hkl才可以成功访问
访问:http://localhost:9527/hkl/mydept/dept/get/1
如下所示,加上 /hkl 前缀 访问成功:

总结一下:
第一步:导入eureka配置和相关路由配置
第二步:application配置相关路由配置
第三步:主启动类开启路由功能
所以说Zuul就是实现 路由 + 过滤
1574

被折叠的 条评论
为什么被折叠?



