zuul 网关的用途_Zuul网关
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:處理請求時發生錯誤時調用
自定義一個過濾器,程式如下
@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集群的負載均衡調用。
總結
以上是生活随笔為你收集整理的zuul 网关的用途_Zuul网关的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓吸顶+下拉放大_Android自定义
- 下一篇: mac要装anaconda吗_Anaco