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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • scrollwidth和clientwidth_vue监听页面滚动

    scrollwidth和clientwidth_vue监听页面滚动本文并非原创,只是真心觉得好,特别是图解的很到位,我在js中经常会用到,就记下来,与大家分享。HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth到底指的哪到哪的距离之完全详解scrollHeight:获取对象的滚动高度。scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离scrollTo

    2025年10月6日
    2
  • dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来

    dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来

    2021年11月24日
    76
  • 矩阵特征值和特征向量怎么求_矩阵的特征值例题详解

    矩阵特征值和特征向量怎么求_矩阵的特征值例题详解设A是n阶方阵,如果存在数m和非零n维列向量 x,使得Ax=mx成立,则称m是A的一个特征值(characteristicvalue)或本征值(eigenvalue)。非零

    2022年8月5日
    5
  • 计算机等级二级java试题(计算机考试选择题知识点)

    第一章数据结构与算法【考点1】算法的基本概念1、算法:是指一组有穷的指令集,是解题方案的准确而完整的描述。算法不等于程序,也不等于计算方法。2、算法的基本特征:1)确定性,算法中每一步骤都必须有明确定义,不允许有多义性;2)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止;3)可行性,算法原则上能够精确地执行;4)拥有足够的情报。3、算法的组成…

    2022年4月13日
    51
  • rpc接口调用实例_rpc中间件

    rpc接口调用实例_rpc中间件RPC框架的讨论一直是各个技术交流群中的热点话题,阿里的dubbo,新浪微博的motan,谷歌的grpc,以及不久前蚂蚁金服开源的sofa,都是比较出名的RPC框架。RPC框架,或者一部分人习惯称之为服务治理框架,更多的讨论是存在于其技术架构,比如RPC的实现原理,RPC各个分层的意义,具体RPC框架的源码分析…但却并没有太多话题和“如何设计RPC接口”这样的业务架构…

    2022年10月13日
    3
  • performSelector 注意问题及原理

    performSelector 注意问题及原理1 首先使用 performSelec 是要特别注意内存泄漏问题 下面代码演示 创建一个控制器 ZWWTestThrea 从上个控制器 push 到该控制器 ZWWLog 的宏定义 ifdefDEBUG defineZWWLog fmt NSLog s Line d fmt PRETTY FUNCTION

    2025年6月22日
    5

发表回复

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

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