搭建zuul网关

1. 路由知识

有关网关的很多知识我们都在04.gateway讲解了,有关网关的详细知识可以到上节详细了解。本节我们主要来讲解下另一个网关zuul。本节结合之前的章节网关搭建的项目案例上实现zuul的搭建,侧重于实战。

2. Zuul现状

zuul官方文档
zuul截止cloud的 H.SR12 版本之后就彻底从官网移除了,假如你这时候还想使用zuul,需要注意cloud版本,springboot版本也需要注意,不可以高于2.3.12.RELEASE。
在这里插入图片描述

3. 入门实战

网关有一个功能是负载均衡,要实现负载均衡功能就需要先进行服务注册中心的搭建,多个服务实例注册到服务注册中心才能形成服务注册列表,负载均衡才有意义。但服务注册中心并不是必须的,毕竟网关的作用并不止负载均衡。注册中心有:nacos、eureka。案例中使用eureka进行,eureka比较方便,并不需要进行客户端下载,使用nacos之前需要先下载对应的nacos客户端。

1)创建eureka注册中心

在我之前的博客中已经详细介绍了搭建的过程,原文链接:https://blog.csdn.net/m0_53951384/article/details/135473214

网关跟注册中心没有直接关联,可以只配置网关,不配置注册中心。本节课程是基于链接实现的注册中心案例继续的,所以先实现注册中心的搭建再往下进行。

eureka注册中心搭建和网关搭建很简单,但是需要有服务注册和服务提供才能看出网关和注册中心的作用,这些一起写了就显得比较繁琐。

2)创建SpringBoot项目

在这里插入图片描述

在这里插入图片描述
注意选择Cloud Bootstrap,该项目才会引入SpringCloud相关依赖。
创建名为【zuul-server】的服务。

3) 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 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.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.lzk</groupId><artifactId>zuul-server</artifactId><version>0.0.1-SNAPSHOT</version><name>zuul-server</name><description>zuul-server</description><properties><java.version>8</java.version><spring-cloud.version>Hoxton.SR1</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</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)配置文件

spring:application:name: zuul-gateway
eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka
server:port: 9527

5)启动类

在启动类上添加以下两个注解

  • @EnableEurekaClient:将zuul注册到注册中心上
  • @EnableZuulProxy:开启网关代理

6)访问

没有添加网关的时候访问订单服务接口:
在这里插入图片描述
添加网关后,可以通过网关访问订单服务接口:相当于在用户访问订单服务前增加了一层,但是这一层目前什么事情都没有做。
由于Zuul自动集成了Ribbon,所以Zuul天生就有负载均衡,我们刷新一次就会发现8080-> 8081
在这里插入图片描述

4. zuul配置

1) 路由配置

zuul在不添加配置的情况下,默认就是允许通过服务名称来调用其他服务的,就像我们上面访问http://localhost:9527/orderservice/order/info一样,zuul也可以指定url来访问。

zuul:routes:orders:	# orders是自己定义的路由名称,可以配置多个path: /order/**url: orderservice  #注册进eureka服务器的服务名称,也可写成http://127.0.0.1:8083,不过这种写法请求就只发向一8081端口

在这里插入图片描述

2) 关闭服务名称访问

既然我已经自定义了路由地址,那么我不希望再通过服务名称来访问,可以通过下面的配置关闭服务名称访问:
在这里插入图片描述

zuul:ignored-services: orderservice		#关闭服务名称查询

在这里插入图片描述
可以指定关闭具体的服务名称访问,也可以用 * 代表全部。

zuul:ignored-services: "*"

3) 统一公共前缀

zuul:prefix: /lzk

添加完统一公共前缀后请求必须加上前缀,否则请求会报404
未添加公共前缀前,下面请求可以访问到,现在报404
在这里插入图片描述
加上前缀访问:
在这里插入图片描述
需要注意:假如设置为zuul的时候,添加zuul前缀访问也会404

zuul:prefix: /zuul

在这里插入图片描述

分析:

  1. 配置完zuul网关,默认的context-path是/zuul。
  2. 在默认的情况下我们不加/zuul也可以请求成功是因为它帮我们做了url的裁剪。
    简单点说在不加zuul.prefix=/zuul配置的情况下,以下两个url都可以请求成功
  • http://localhost:9527/order/order/info
  • http://localhost:9527/zuul/order/order/info

解决:

  1. 将默认context-path设置为空:zuul.servlet-path=/
  2. 配置网关zuul的统一前缀:zuul.prefix=/zuul
zuul:prefix: /zuulservlet-path: /

设置完之后就必须通过前缀/zuul可以访问,不加前缀就访问不了

4)指定路由不设置前缀

zuul:ignored-services: orderserviceprefix: /lzkroutes:orders:path: /order/**url: orderservicestrip-prefix: falseservlet-path: /

prefix是设置全局的前缀,stripPrefix是针对单个路由是否要用前缀访问的设置,默认是true,这个是官网也有说明,但是问题是当设置为false的时候不管设置不设置前缀访问都是404,我认为是版本bug。开始测完访问不到我认为可能是servlet-path默认为zuul有问题,但即使设置为/还是不行,但区别就是设置为/后页面不报404,但后台还是显示路由不了。

5)超时时间设置

如果您使用@EnableZuulProxy,则可以使用代理路径上传文件,只要文件很小,它应该可以工作。对于大文件接口访问慢,这时候需要设置超时时间,如下:

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000
ribbon:ConnectTimeout: 3000ReadTimeout: 60000

如果你想通过 Zuul 代理的请求,配置套接字超时和读取超时,有下面选项:

zuul:host:connect-timeout-millis: 40000socket-timeout-millis: 40000connection-request-timeout-millis: 40000

一些常用配置:

zuul.host.connect-timeout-millis=40000
zuul.host.socket-timeout-millis=40000
zuul.host.connection-request-timeout-millis=40000
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=40000
ribbon.ReadTimeout=10000
ribbon.ConnectTimeout=10000

5. zuul过滤器

过滤器可以对请求进行额外的处理,在gateway中也介绍过过滤器,还有自定义过滤器。

1) 自定义 Zuul 过滤器

过滤类型:

  • pre: 在请求被路由到目标服务前执行,比如权限校验、打印日志等功能;
  • routing: 在请求被路由到目标服务时执行
  • post: 在请求被路由到自标服务后执行,比如给目标服务的响应添加头信息,收集统计数据等功能;
  • error: 请求在其他阶段发生错误时执行。
@Component
@Slf4j
public class PreLogFilter extends ZuulFilter {// 请求类型@Overridepublic String filterType() {return "pre";}// 假如多个过滤器,会根据这个数字来进行排序执行@Overridepublic int filterOrder() {return 1;}// 过滤器是否开启@Overridepublic boolean shouldFilter() {return true;}// 执行自己的业务逻辑@Overridepublic Object run() {RequestContext requestContext = RequestContext.getCurrentContext();HttpServletRequest request = requestContext.getRequest();String host = request.getRemoteHost();String method = request.getMethod();String uri = request.getRequestURI();log.info("=====> Remote host:{},method:{},uri:{}", host, method, uri);System.out.println("********" + System.currentTimeMillis());return null;}
}

请求发起的时候控制台会打印对应的日志详情。

通过配置文件当中,可以关闭过滤器,过滤器的名字PreLogFilter就是我们上面自定义的。

zuul:PreLogFilter:pre:disable: true # 关闭前置过滤器

关闭后控制台不会打印对应的日志信息。

ZuulFilter中还有很多子类供我们进行过滤处理
在这里插入图片描述

文章参考:https://blog.csdn.net/weixin_43888891/article/details/126445571

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/610260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ZooKeeper高手实战】ZooKeeper 工业级的场景(配置中心、日志系统、数据同步系统)

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

深入理解 Hadoop (五)YARN核心工作机制浅析

概述 YARN 的核心设计理念是 服务化&#xff08;Service&#xff09; 和 事件驱动&#xff08;Event EventHandler&#xff09;。服务化 和 事件驱动 软件设计思想的引入&#xff0c;使得 YARN 具有低耦合、高内聚的特点&#xff0c;各个模块只需完成各自功能&#xff0c;而模…

熟悉HDFS常用操作

1. 利用Hadoop提供的Shell命令完成下列任务 (1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件。 #检查文件是否存在./bin/hdfs dfs -test -e text.txt echo $? #结果是1 代表已存在 #根据结果判断出文件已存…

dubbo与seata集成

1.seata是什么? Seata 是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 2.seata的注解 GlobalTransactional&#xff1a;全局事务注解&#xff0c;添加了以后可实现分布式事务的回滚和提交&#xff0c;用法与spring…

VMware虚拟机安装Ubuntu

准备:Ubuntu的镜像文件,VMware,手. 1.新建虚拟机&#xff0c;选择自定义&#xff0c;下一步。 2.硬件兼容性&#xff0c;选择Workstation 16.x&#xff0c;下一步。 3.选择安装程序光盘映像文件&#xff0c;路径为映像文件所在文件夹&#xff0c;下一步。 4. 创建用户和设置密…

hive 函数使用详解

一、前言 在任何一种编程语言中,函数可以说是必不可少的,像mysql、oracle中,提供了很多内置函数,或者通过自定义函数的方式进行定制化使用,而hive作为一门数据分析软件,随着版本的不断更新迭代,也陆续出现了很多函数,以满足日常数据查询与分析的各种场景。 二、hive 函…

GEE中导入研究区shape

找到Assets&#xff0c;新建NEW 等待上传完成 从Assets列表中找到导入文件&#xff0c;复制ID

106短信群发如何发送会员通知

106短信群发可以通过以下步骤发送会员通知&#xff1a; 1.确定通知内容&#xff1a;首先需要确定要发送的通知内容&#xff0c;包括通知的主题、内容、时间、地点等信息。 2.设计通知模板&#xff1a;根据通知内容&#xff0c;设计通知模板。模板应包括短信的格式、语言风格、…

AI教我学编程之C#入门程序详解与拓展

与AI肩并肩 前言一、一个简单的C#程序补充说明对话AI 二、标识符三、关键字四、Main五、空白1. 缩进2. 代码块的间距3. 操作符的空格4. 换行5. 一致性 六、语句七、从程序输出文本主题&#xff1a;从程序中输出文本1. Write 和 WriteLine 方法2. 格式字符串3. 多重标记和值4. 格…

Banner设计专家详细解释和使用技巧!

一、banner的作用 宝安在运营工作中具有吸引注意力、提高转化率、传达信息、提升品牌形象、引导用户行为、营造活动氛围等多种功能。因此&#xff0c;在运营工作中&#xff0c;需要根据具体需要和目标精心设计和合理使用宝安&#xff0c;才能达到更好的运营效果。 二、banner…

【读书笔记】网空态势感知理论与模型(七)

通过网络级对象依赖关系揭示0Day攻击路径 1. 研究动机 0Day攻击是攻击者和防御者之间信息不对称的结果。赛门铁克研究人员认为&#xff0c;典型的0Day攻击平均隐藏312天才会被觉察。 受到SKRM模型启发&#xff0c;Patrol系统以全局视野来调查在某一个路径上的0Day攻击行为。从…

k8s-存储 11

一、configmapu存储 首先&#xff0c;确保集群正常&#xff0c;节点都处于就绪状态 Configmap用于保存配置数据&#xff0c;以键值对形式存储。configMap资源提供了向 Pod 注入配置数据的方法&#xff0c;旨在让镜像和配置文件解耦&#xff0c;以便实现镜像的可移植性和可复用…

js实现倒计时

今天和大家分享一个小功能&#xff0c;在我们进行需要获取手机验证码或其他方式的验证码进行登录时会有一个功能&#xff0c;就是当你点击发送验证码时会有一个倒计时&#xff0c;倒计时没有结束时按钮是禁用的状态&#xff0c;防止重复发送短信&#xff0c;下面我们来看一下这…

【数据结构】——期末复习题题库(7)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

C2-4.3.1 多个决策树——随机森林

C2-4.3.1 多个决策树——随机森林 参考链接 1、为什么要使用多个决策树——随机森林&#xff1f; 决策树的缺点&#xff1a; A small change in the data can cause a large change in the structure of the decision tree causing instability 即&#xff1a;对数据集 中…

持续领跑云安全赛道!安全狗多项安全能力获认可

近日&#xff0c;以“数字安全 未来可期”为主题的“2024安全市场年度大会”在北京成功举行。 作为国内云原生安全领导厂商&#xff0c;安全狗也受邀出席此次活动。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;创办于2013年&#xff0c;是国内领…

Redis主从复制哨兵及集群

目录 一.主从复制 主从复制的工作原理如下&#xff1a; 主从复制的作用&#xff1a; 搭建Redis 主从复制 每台服务器配置&#xff1a; ​编辑进行编译安装&#xff1a; 定义systemd服务管理脚本&#xff1a; 开启服务&#xff0c;报错看下内容&#xff1a; 修改 Redis…

Python 日志模块 logging 的最佳实践,内容干练简洁

文章目录 1. 引言2. 定义日志类3. 引用日志4. 参考 1. 引言 每次写 python 代码&#xff0c;想找一个日志模块 logging 的最佳实践&#xff0c;都要找一大圈&#xff0c;确不一定可以找到合适的最佳实践。 痛定思痛&#xff0c;我决定下笔记录目前觉得合适的 python 日志的用…

代码混淆:保护您的应用程序

目录 引言 什么是代码混淆&#xff1f; 代码混淆常见手段 代码混淆的作用 代码混淆可能带来的问题 常用的混淆工具 如何使用ipaguard进行混淆 总结 引言 在当今数字化时代&#xff0c;移动应用程序已经成为人们生活和工作中不可或缺的一部分。但是&#xff0c;随着应用…

PPT插件-大珩助手-清除同类

清除同类-颜色 对于选定的形状&#xff0c;删除相同颜色 清除同类-文本 删除当前幻灯片中的文本对象 清除同类-非文本 删除当前幻灯片中的非文本对象 清空当页 删除当前幻灯片中的所有对象 选中的形状动画 删除选中的对象上的形状动画 当前页形状动画 对于当前页中的…