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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

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