上一篇 <<<Gateway網(wǎng)關(guān)轉(zhuǎn)發(fā)demo
下一篇 >>>Gateway高可用集群與動(dòng)態(tài)網(wǎng)關(guān)
Spring Cloud Zuul可以理解為一個(gè)集網(wǎng)關(guān)(路由)、負(fù)載均衡、校驗(yàn)過(guò)濾、結(jié)合服務(wù)治理框架、請(qǐng)求轉(zhuǎn)發(fā)時(shí)熔斷機(jī)制、服務(wù)聚合等 一系列功能。我們可以將Zuul當(dāng)成一個(gè)門(mén)面,所有外部請(qǐng)求都經(jīng)過(guò)Zuul的轉(zhuǎn)發(fā)到具體的服務(wù)實(shí)例,減少了每個(gè)服務(wù)之間互相鑒權(quán)代碼冗余問(wèn)題,統(tǒng)一交給Zuul進(jìn)行鑒權(quán),在此基礎(chǔ)上集成上邊說(shuō)的高級(jí)功能。路由功能相當(dāng)于反向代理。
1.反向代理功能
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
### 配置網(wǎng)關(guān)反向代理
zuul:
routes:
api-a:
### 以 /api-member/訪問(wèn)轉(zhuǎn)發(fā)到會(huì)員服務(wù)
path: /api-member/**
serviceId: app-jarye-member
api-b:
### 以 /api-order/訪問(wèn)轉(zhuǎn)發(fā)到訂單服務(wù)
path: /api-order/**
serviceId: app-jarye-order
2.網(wǎng)關(guān)的過(guò)濾功能
@Component
public class TokenFilter extends ZuulFilter {
public Object run() throws ZuulException {
// 獲取上下文
RequestContext currentContext = RequestContext.getCurrentContext();
HttpServletRequest request = currentContext.getRequest();
String userToken = request.getParameter("userToken");
if (StringUtils.isEmpty(userToken)) {
currentContext.setSendZuulResponse(false);
currentContext.setResponseStatusCode(401);
currentContext.setResponseBody("userToken is null");
return null;
}
// 否則正常執(zhí)行業(yè)務(wù)邏輯.....
return null;
}
// 判斷過(guò)濾器是否生效
public boolean shouldFilter() {
return true;
}
// 過(guò)濾器的執(zhí)行順序。當(dāng)請(qǐng)求在一個(gè)階段的時(shí)候存在多個(gè)多個(gè)過(guò)濾器時(shí),需要根據(jù)該方法的返回值依次執(zhí)行
public int filterOrder() {
return 0;
}
// 過(guò)濾器類型 pre 表示在 請(qǐng)求之前進(jìn)行攔截
public String filterType() {
return "pre";
}
}
3.動(dòng)態(tài)網(wǎng)關(guān)配置
Git動(dòng)態(tài)配置
### 配置網(wǎng)關(guān)反向代理
zuul:
routes:
api-a:
### 以 /api-member/訪問(wèn)轉(zhuǎn)發(fā)到會(huì)員服務(wù)
path: /api-member/**
serviceId: app-jarye-member
api-b:
### 以 /api-order/訪問(wèn)轉(zhuǎn)發(fā)到訂單服務(wù)
path: /api-order/**
serviceId: app-jarye-order
<!-- actuator監(jiān)控中心 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- springcloud config 2.0 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
###網(wǎng)關(guān)名稱
spring:
application:
name: service-zuul
cloud:
config:
####讀取后綴
profile: dev
####讀取config-server注冊(cè)地址
discovery:
service-id: config-server
enabled: true
###默認(rèn)服務(wù)讀取eureka注冊(cè)服務(wù)列表 默認(rèn)間隔30秒
###開(kāi)啟所有監(jiān)控中心接口
management:
endpoints:
web:
exposure:
include: "*"
// zuul配置能夠使用config實(shí)現(xiàn)實(shí)時(shí)更新
@RefreshScope
@ConfigurationProperties("zuul")
public ZuulProperties zuulProperties() {
return new ZuulProperties();
}
手動(dòng)刷新:
http://127.0.0.1/actuator/refresh
推薦閱讀:
<<<網(wǎng)關(guān)背景分類及常用框架
<<<微服務(wù)網(wǎng)關(guān)與過(guò)濾器的區(qū)別
<<<Nginx與Zuul的區(qū)別
<<<Zuul與Gateway有哪些區(qū)別
<<<Nginx與網(wǎng)關(guān)的區(qū)別
<<<如何保證微服務(wù)接口的安全
<<<Gateway網(wǎng)關(guān)轉(zhuǎn)發(fā)demo
<<<Gateway高可用集群與動(dòng)態(tài)網(wǎng)關(guān)
<<<Gateway的謂詞配置實(shí)例
<<<Gateway配置及流程分析