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


相关推荐

  • Minimum Size Subarray Sum — leetcode[通俗易懂]

    Minimum Size Subarray Sum — leetcode

    2022年2月3日
    64
  • 【安装库】matlab2020b安装及百度网盘提速

    【安装库】matlab2020b安装及百度网盘提速【安装库】matlab2020b安装及百度网盘提速matlab2020b安装一,下载百度网盘链接:https://pan.baidu.com/s/18iLFaAbWt8IntUefX3eWfA提取码:p6in如果下载很慢的话应该是没开p2p加速(最近度盘良心发现加了个p2p下载)开启方法:打开设置开启提速模式开启后会提供一部分资源给别人下载,不下载的时候也会占用一定资源,当然这是相互的,你加速的时候别人也在和你共享资源,所以p2p才快,所以加速也只对热门资源比较有效

    2022年6月1日
    51
  • Node.js的安装及环境配置【超详细】

    Node.js的安装及环境配置【超详细】Step1:去官网下载安装包下载方式1:官网下载根据自己电脑系统及位数选择。注意:图中.msi和.zip格式区别:1、.msi是Windowsinstaller的数据包,实际上是一个数据库,提供安装,修改,卸载你所安装的程序。此外:它还包含有关安装过程本身的信息。例如:安装序列、目标文件夹路径、安装选项和控制安装过程的属性。2、.zip是一个压缩包,解压之后即可,不需要安装。…

    2022年6月11日
    39
  • 十进制与八进制和十六进制之间的转换

    十进制与八进制和十六进制之间的转换

    2022年3月5日
    40
  • 你有网站吗_有些网站进不去怎么办

    你有网站吗_有些网站进不去怎么办1.最强大的“免费电子书”下载区——新浪电子书共享http://ishare.iask.sina.com.cn/(数十万册哦,全是免费滴!)2.性能很好的免费网络硬盘——云盘网(10G免费超大空间哦,支持共享,可加密文件)http://www.diskes.com/3.爱酷美剧(一边看美剧,一边学英语,不耽误啊!)http://www.icoolen.com/film4.传说中“天涯第一镇山神贴”!!!(先说明白了。机子配置低的不要点开。会死机的。镇山贴可不是开玩笑的,配置低的,直接卡死在外面,配置

    2022年10月2日
    7
  • Python保留指定位数的小数

    Python保留指定位数的小数Python保留指定位数的小数1’%.2f’%f方法(推荐)2format函数(推荐)3round()函数4不进行四舍五入,直接进行截断1’%.2f’%f方法(推荐)f=1.23456print(‘%.4f’%f)print(‘%.3f’%f)print(‘%.2f’%f)结果:1.23461.2351.23这个方法会进行四舍五入2…

    2022年8月12日
    5

发表回复

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

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