SpringCloud-Netflix学习笔记13——Zuul路由网关
创始人
2024-05-25 12:50:17
0

什么是Zuul?

  Zuul包含了对请求的路由和过滤两个最主要的功能。

  其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础。Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

  注意:Zuul服务最终还是会注册进Eureka。

  提供:代理 + 路由 + 过滤 三大功能!

Zuul能干嘛

  • 路由
  • 过滤

  官网文档:https://github.com/Netflix/zuul

Zuul路由的基本配置

  1、新建一个子模块 springcloud-zuul-9527,并且添加依赖,依赖如下(其中Zuul 和 Eureka依赖是必要的):

    org.springframework.cloudspring-cloud-starter-zuul1.4.7.RELEASEorg.springframework.cloudspring-cloud-starter-hystrix1.4.7.RELEASEorg.springframework.cloudspring-cloud-starter-hystrix-dashboard1.4.7.RELEASEorg.springframework.cloudspring-cloud-starter-ribbon1.4.7.RELEASEorg.springframework.cloudspring-cloud-starter-eureka1.4.7.RELEASEcom.tangspringcloud-api1.0-SNAPSHOTorg.springframework.bootspring-boot-starter-web

  2、编写配置文件,端口为 9527,并且Zuul会以服务注册进Eureka ,所以一些Eureka的配置也必不可少,如下:

server:port: 9527# 应用名称,即该微服务的名称
spring:application:name: springcloud-zuul# Eureka服务提供者的配置,服务注册到哪里,即注册中心的地址(搭建集群情况下)
eureka:client:service-url:defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/instance:instance-id: springcloud-zuul-9527  # Eureka服务监控页面的Status,不配置的话会有默认值prefer-ip-address: true  # 为true,可以显示服务主机所在的ip,而不是默认的localhost
# 配置监控信息,即Status那个页面的信息
info:aap.name: tangshihua-springcloudcompany.name: org.tang.cn

  3、编写主启动类,添加注解 @EnableZuulProxy 开启Zuul路由,这里需要说明的是,用这个注解就能将该服务注册进Eureka了,不用加@EnableEurekaClient注解,代码如下:

@SpringBootApplication
@EnableZuulProxy  //开启Zuul路由代理(用这个注解就能将该服务注册进Eureka了,不用加@EnableEurekaClient注解)
public class ZuulApplication_9527 {public static void main(String[] args) {SpringApplication.run(ZuulApplication_9527.class, args);}
}

  4、开启 ZuulApplication_9527、springcloud-provider-dept-hystrix-8001、springcloud-eureka-7001进行测试。可以看到Zuul被当成一个微服务注册进了 Eureka:

在这里插入图片描述

  此时我们直接访问8001端口的地址:http://localhost:8001/dept/queryDeptById/2 ,可以获取服务:
在这里插入图片描述

  我们也可以通过Zuul路由9527的地址对8001的服务进行访问,地址要加上服务名 springcloud-provider-dept(小写):

在这里插入图片描述
  我的为什么不是 localhost,而是 www.tangshihua.com 呢?因为我在 hosts 文件中做了映射,如下:
在这里插入图片描述
  文件地址在左上角。

请求拦截

  如果我们直接以服务名进行访问的话,就会暴露我们的微服务信息,很不安全,所以我们可以用一个自己定义的名字来替换掉访问地址中的微服务名字,在配置文件中配置即可,如下:

zuul:routes:# 将访问链接中的微服务名称,可以换成mydept,方便隐藏信息mydept.serviceId: springcloud-provider-deptmydept.path: /mydept/**

  现在我们不仅可以通过微服务名称访问服务,也可以通过mydept访问微服务,如下:
在这里插入图片描述

  虽然可以通过mydept访问微服务,但是通过微服务名称还是可以访问微服务,我们可以直接配置,让通过微服务名称直接访问不了微服务,配置如下:

zuul:ignored-services: springcloud-provider-dept  # 不能在使用这个路径访问了

  效果如下:

在这里插入图片描述
  如果有很多微服务需要隐藏的话,可以用通配符 * ,配置如下:

zuul:ignored-services: "*"  # 隐藏全部的真实路径,因为微服务可能有很多个,不可能把所有名称都写进来,直接用通配符

  效果是一样的,这里就不重复演示了。

  我们除了拦截请求之外,还可以对访问路径进行一些配置,比如加个前缀之类的,如下:

zuul:prefix: /tang   # mydept前面需要加一个/tang前缀才能正常访问

  现在要访问微服务的话,需要在地址上加一个前缀 /tang 才能正常访问,如果不加就访问不了,效果如下:
在这里插入图片描述

在这里插入图片描述

总结

  用户请求首先进入Zuul路由网关,通过网关进行路由或者拦截,配置十分方便!

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...