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


相关推荐

  • inception v3网络_Netmarble

    inception v3网络_Netmarble本文叙述了CNN历史以来的发展模型,介绍了发展流程以及发展路线,并对比了各种Inception模型区别,详细介绍了Inceptionv3模型,读者可以轻松了解到Inception模型的发展情况。

    2022年8月14日
    5
  • Mybatis学习地址总结整理-持续更新……「建议收藏」

    MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    2022年2月26日
    31
  • 免费的API接口_api平台

    免费的API接口_api平台转:https://blog.csdn.net/qq_35304570/article/details/79811226声明:整理记录,自己开发过程使用,请勿用做非法途径!参考:http://developer.51cto.com/art/201412/458778.htm豆瓣:https://api.douban.com/v2/book/search?q="百年孤独" …

    2022年9月27日
    0
  • Apk 签名验证

    Apk 签名验证当app进行反编译后修改,再回编译,若出现闪退的情况时,则有可能是由于程序本身已存在签名验证,才会出现闪退,今天分享如何解决因签名验证而出现的闪退现象。v:13140310004q:32519015161阅读签名验证源码1.打开文件2.分析Java层,在调用init这个方法里面,是进行按钮以及其他控件的初始化3.接下来是一个注册函数,判断用户名和密码是否相等,从而弹出不同的提示4.LoginActivity类继承了BaseActivity,先分析BaseActivity这个类5.分析onC

    2022年6月7日
    81
  • linux杀死进程的五种方法「建议收藏」

    linux杀死进程的五种方法「建议收藏」方法一:Terminal终端输入:gnome-system-monitor,就可以打开systemmonitor如图:然后找到相应进程,右击选择killprocess就可以了方法二:通过kill进程id的方式可以实现,首先需要知道进程id,例如,想要杀死firefox的进程,通过ps-ef|grepfirefox,可以查到firefox的进程

    2022年9月29日
    0
  • git merge用法详解_git merge 冲突

    git merge用法详解_git merge 冲突一、开发分支(dev)上的代码达到上线的标准后,要合并到master分支gitcheckoutdevgitpullgitcheckoutmastergitmergedevgitpush-uoriginmaster二、当master代码改动了,需要更新开发分支(dev)上的代码gitcheckoutmastergitpullgitch…

    2022年10月19日
    0

发表回复

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

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