zuul 网关的用途_Zuul网关

zuul 网关的用途_Zuul网关Zuul的主要作用:1.路由,进行请求转发。2.鉴权,进行身份认证(安全)。3.限流,限制访问的数量,保证服务器的稳定。除此之外还有以下作用4.负载均衡。5.压力测试。6.监控1.Zuul简单使用1.添加依赖org.springframework.cloudspring-cloud-starter-netflix-zuul2.添加@EnableZuulProxy注解@EnableZuulProx…

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

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

Zuul的主要作用:

1.路由,进行请求转发。

2.鉴权,进行身份认证(安全)。

3.限流,限制访问的数量,保证服务器的稳定。

除此之外还有以下作用

4.负载均衡。

5.压力测试。

6.监控

1.Zuul简单使用

1.添加依赖

org.springframework.cloud

spring-cloud-starter-netflix-zuul

2.添加@EnableZuulProxy 注解

@EnableZuulProxy

@SpringBootApplication

@EnableDiscoveryClient

public class GatewayApplication {

public static void main(String[] args) {

SpringApplication.run(GatewayApplication.class,args);

}

}

3.配置路由地址

a.配置写死的地址

zuul:

routes:

user:

path: /user/**

url: http://127.0.0.1:8083

b.结合eureka,动态拉取服务列表,根据服务id找到对应的url。

eureka:

client:

service-url:

defaultZone: http://localhost:8761/eureka

zuul:

routes:

user:

path: /user-service/**

serviceId: user-service

c.简化版配置,routes的key是服务id,值是映射的地址

zuul:

routes:

user-service: /user-service/**

d.Zuul默认为从eureka拉取服务列表中的所有服务配置了key=服务名,值为 /服务名/** 的routes。也就是说即使不做任何配置,也可以匹配服务名进行访问服务。

e.某些服务不需要Zuul的默认配置,做以下配置做过滤。

ignored-services:

– customer-service

f.若想去除路由前缀,可做以下配置。strip-prefix: false

zuul:

routes:

#user-service: /user-service/**

user:

path: /user/**

serviceId: user-service

strip-prefix: false

2.ZuulFilter简介

Zuul最重要的一个功能是实现请求的鉴权,而Zuul实现的方式是通过过滤器,ZuulFilter则是这些过滤器的顶级父类,其中有四个最重要的方法。

//过滤器类型

public abstract String filterType();

//过滤器优先级

public abstract int filterOrder();

//是否启用过滤器

boolean shouldFilter();

//过滤逻辑

Object run() throws ZuulException;

其中,Zuul的过滤器类型主要有四种,也代表着ZuulFilter的生命周期

pre:请求在路由被执行之前

routing:在路由请求时调用

post:在routing和error过滤器之后调用

error:处理请求时发生错误时调用

zuul 网关的用途_Zuul网关

自定义一个过滤器,程式如下

@Component

public class LoginFilter extends ZuulFilter {

//过滤器类型,分为pre(处理请求头,身份验证等),routing(路由转发),post(路由转发后的处理),error(处理请求时发生错误时调用)

@Override

public String filterType() {

return FilterConstants.PRE_TYPE;

}

//优先级

@Override

public int filterOrder() {

return FilterConstants.SERVLET_DETECTION_FILTER_ORDER-1;

}

//是否启动过滤拦截

@Override

public boolean shouldFilter() {

return true;

}

//拦截的逻辑

@Override

public Object run() throws ZuulException {

RequestContext context = RequestContext.getCurrentContext();

HttpServletRequest request =context.getRequest();

String token = request.getParameter(“access-token”);

if (StringUtils.isBlank(token)){

context.setSendZuulResponse(false);

context.setResponseStatusCode(HttpStatus.FORBIDDEN.value());

}

return null;

}

}

3. Zuul的负载均衡和熔断机制

Zuul集成了Ribbon和Hystrix,只需要做简单的配置,就可以实现负载均衡和熔断机制。需要注意的是,hystrix的超时时长要大于RIbbon的超时时长。另外,Zuul中Ribbon的超时时长计算公式如下

ribbonTimeout = (ribbonReadTimeout + ribbonConnectTimeout) * (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1);

hystrix:

command:

default:

execution:

isolation:

thread:

timeoutInMilliseconds: 6000

ribbon:

ConnectionTimeOut: 500

ReadTimeOut: 2000

4.Zuul的高可用性

Zuul作为微服务,可以启动多台Zuul,自动注册到eureka上,形成集群。通常可搭配Ngnix服务网关来使用,来实现对Zuul集群的负载均衡调用。

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

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

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

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

(0)


相关推荐

发表回复

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

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