Zuul网关使用_zuul网关的作用

Zuul网关使用_zuul网关的作用Zuul介绍Zuul与SpringCloudGateway作用差不多,推荐还是使用SpringCloudGateway,毕竟是Spring家族的,优先级高一些。他们都和Nginx一样,主要是用于服务器的反向代理;只要是反向代理,那么久可以提供路由、监控、弹性、安全等功能;一般也是说是网关,因为数据的入口都从这么流入流出。Zuul的核心是过滤器,通过这些过滤器我们可以扩展出很多功能,比如:动态路由动态地将客户端的请求路由到后端不同的服务,做一些逻辑处理,比如聚合多个服务的数据返回。请求监

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Zuul介绍

Zuul与Spring Cloud Gateway作用差不多,推荐还是使用Spring Cloud Gateway,毕竟是Spring家族的,优先级高一些。他们都和Nginx一样,主要是用于服务器的反向代理;只要是反向代理,那么久可以提供路由、监控、弹性、安全等功能;一般也是说是网关,因为数据的入口都从这么流入流出。

Zuul 的核心是过滤器,通过这些过滤器我们可以扩展出很多功能,比如:

  1. 动态路由
    动态地将客户端的请求路由到后端不同的服务,做一些逻辑处理,比如聚合多个服务的数据返回。
  2. 请求监控
    可以对整个系统的请求进行监控,记录详细的请求响应日志,可以实时统计出当前系统的访问量以及监控状态。
  3. 认证鉴权
    对每一个访问的请求做认证,拒绝非法请求,保护好后端的服务。
  4. 压力测试
    压力测试是一项很重要的工作,像一些电商公司需要模拟更多真实的用户并发量来保证重大活动时系统的稳定。通过 Zuul 可以动态地将请求转发到后端服务的集群中,还可以识别测试流量和真实流量,从而做一些特殊处理。
  5. 灰度发布
    灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

在这里插入图片描述

Zuul 简单使用

添加依赖配置,修改pom.xml文件

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
		</dependency>
		<dependency>
		    <groupId>org.springframework.cloud</groupId>
		    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>

添加配置信息,修改文件application.properties

spring.application.name=zuul-demo
server.port=2103

zuul.routes.test.path=/test/* zuul.routes.test.url=http://192.168.1.244:8081 

激活zuul,添加启动注解@EnableZuulProxy

@EnableZuulProxy
@SpringBootApplication
public class Application { 
   

	public static void main(String[] args) { 
   
		SpringApplication.run(Application.class, args);
	}

}

测试,应用主机rest服务接口
在这里插入图片描述
测试代理网关
在这里插入图片描述
集成 Eureka,使用注册服务名称转发

修改文件application.properties

spring.application.name=zuul-demo
server.port=2103

#zuul.routes.test.path=/test/* #zuul.routes.test.url=http://192.168.1.244:8081 eureka.client.serviceUrl.defaultZone=http://192.168.1.244:8761/eureka/ 

启动Eureka
在这里插入图片描述
测试网关
在这里插入图片描述

Zuul路由配置

默认的转发规则就是API 网关地址+访问的服务名称+接口 URI

默认规则举例:

  • API 网关地址:http://localhost:2103。
  • 用户服务名称:user-service。
  • 用户登录接口:/user/login。

eg. 上述我们访问的测试地址:http://localhost:2103/eureka-provider-app/hello

  1. 指定具体服务路由
zuul.routes.test.path=/test/* zuul.routes.test.url=http://192.168.1.244:8081 

我们将服务/test开头的接口都转发到http://192.168.1.244:8081上

  1. 路由前缀
    转发后的目标地址,加上前缀,如
zuul.prefix=v1.0

在这里插入图片描述

Zuul过滤器

基于Servlet实现过滤器,实现参考类com.netflix.zuul.http.ZuulServlet,方法service,流程如下图所示
在这里插入图片描述
对应代码

            try { 
   
                preRoute();
            } catch (ZuulException e) { 
   
                error(e);
                postRoute();
                return;
            }
            try { 
   
                route();
            } catch (ZuulException e) { 
   
                error(e);
                postRoute();
                return;
            }
            try { 
   
                postRoute();
            } catch (ZuulException e) { 
   
                error(e);
                return;
            }

举例说明一下,定义一个token过滤器(随便找了一个实现类,如DebugFilter,仿写即可)

public class TokenFilter extends ZuulFilter { 
   

	@Override
	public boolean shouldFilter() { 
   
		return true;
	}

	@Override
	public Object run() throws ZuulException { 
   
		RequestContext currentContext = RequestContext.getCurrentContext();
		HttpServletRequest request = currentContext.getRequest();
		String token = request.getHeader("H-TOKEN-X");
		if (StringUtils.isBlank(token) || token.length() < 10) { 
   
			currentContext.setSendZuulResponse(false);
			currentContext.getResponse().setContentType("application/json; charset=utf-8");
			currentContext.setResponseBody("invalide token.");
		}
		
		return null;
	}

	@Override
	public String filterType() { 
   
		return FilterConstants.PRE_TYPE;
	}

	@Override
	public int filterOrder() { 
   
		return 1;
	}

}

将对象注入到spring容器中

@Configuration
public class FilterConfig { 
   
	@Bean
	public TokenFilter tokenFilter() { 
   
		return new TokenFilter();
	}
}

测试,Token成功案例
在这里插入图片描述
测试,Token失败案例
在这里插入图片描述

说明error类型,可以对异常进行处理,但是最终会跳转到/error uri
在这里插入图片描述
实际开发中参考例子开发即可,更升入理解可以研究类FilterProcessor

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170624.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月15日 下午10:16
下一篇 2022年8月15日 下午10:36


相关推荐

  • onedrive自动同步_onedrive没有同步

    onedrive自动同步_onedrive没有同步Zotero管理文献时,经常需要同步不同设备的文献到Zotero云端以保持版本统一,但是Zotero提供的免费空间不够用来同步大量pdf附件。这时,可以使用第三方云平台来实现同步,比如坚果云,onedrive等。这里,我用onedrive来存储Zotero的pdf文件。………

    2025年10月10日
    4
  • potplayer+madvr_potplayer安装包

    potplayer+madvr_potplayer安装包ctrl+j调出madvr的OSD菜单如下图:如何设置madVR10bit输出:1.确保视频源是10bit源2.显示器设置如下:3.渲染设置如下:设置完成,OSD信息变化如下:如何确定是否HDR设置生效:调节如下targetpeaknits:100或者200,如果100比200时的屏幕亮,说明HDR生效。…

    2025年11月18日
    3
  • ORACLE游标(oracle游标属性)

    ORACLE游标(oracle游标属性)文章目录1概述1.1思维导图2语法2.1基本写法(4步)2.2游标4大属性3分类3.1静态游标3.1.1隐式游标dml3.1.2显式游标cursor3.2动态游标3.2.1自定义类型refcursor3.2.2系统类型sys_refcursor4扩展4.1三种游标循环效率对比4.2实例:实际开发中,游标遍历数据1概述1.游标是什么?用来存储多条查询数据的一种数据结构(’结果集’),它有一个’指针’,从上往下移动(’fetch’),从而能够’

    2022年4月18日
    89
  • 版OpenClaw来了!三行代码就能部署

    版OpenClaw来了!三行代码就能部署

    2026年3月13日
    2
  • [MySQL高级](一) EXPLAIN用法和结果分析

    [MySQL高级](一) EXPLAIN用法和结果分析1 EXPLAIN 简介使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句 从而知道 MySQL 是如何处理你的 SQL 语句的 分析你的查询语句或是表结构的性能瓶颈 通过 EXPLAIN 我们可以分析出以下结果 表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之间的引用每张表有多少行被优化器查询 使用方式如下 EXPLAIN SQL 语

    2026年3月20日
    2
  • 基础工具之消息队列、线程池、缓冲区抽象、事件循环和日志实现

    正所谓“工欲善其事,必先利其器”,我们在实现通信设计任务的过程中需要一些基础工具来帮助我们搭建部分基础组件,这些基础工具包括消息队列,线程池,缓冲区抽象,事件循环和日志工具。接下来对这部分基础工具进

    2021年12月28日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号