網(wǎng)關(guān)
發(fā)送請(qǐng)求需要知道商品服務(wù)的地址,如果商品服務(wù)器有100服務(wù)器,1號(hào)掉線后,
還得改,所以需要網(wǎng)關(guān)動(dòng)態(tài)地管理,他能從注冊(cè)中心中實(shí)時(shí)地感知某個(gè)服務(wù)上
線還是下線。
請(qǐng)求也要加上詢問(wèn)權(quán)限,看用戶有沒(méi)有權(quán)限訪問(wèn)這個(gè)請(qǐng)求,也需要網(wǎng)關(guān)。
所以我們使用spring cloud的gateway組件做網(wǎng)關(guān)功能。
網(wǎng)關(guān)是請(qǐng)求瀏覽的入口,常用功能包括路由轉(zhuǎn)發(fā),權(quán)限校驗(yàn),限流控制等。springcloud gateway取代了zuul網(wǎng)關(guān)。
三大核心概念:
Route: The basic building block of the gateway. It is defined by an ID, a
destination URI, a collection of predicates斷言, and a collection of filters.
A route is matched if the aggregate predicate is true.
發(fā)一個(gè)請(qǐng)求給網(wǎng)關(guān),網(wǎng)關(guān)要將請(qǐng)求路由到指定的服務(wù)。
路由有id,
目的地uri,
斷言的集合,
匹配了斷言就能到達(dá)指定位置,
Predicate斷言:
This is a Java 8 Function Predicate. The input type is a Spring
Framework ServerWebExchange. This lets you match on anything from the
HTTP request, such as headers or parameters.就是java里的斷言函數(shù),匹配請(qǐng)求里的任何信息,包括請(qǐng)求頭等
Filter:
These are instances of Spring Framework GatewayFilter that have been
constructed with a specific factory. Here, you can modify requests and
responses before or after sending the downstream request.
過(guò)濾器請(qǐng)求和響應(yīng)都可以被修改。
客戶端發(fā)請(qǐng)求給服務(wù)端。中間有網(wǎng)關(guān)。先交給映射器,如果能處理就交給handler
處理,然后交給一系列filer,然后給指定的服務(wù),再返回回來(lái)給客戶端。
12.1 創(chuàng)建模塊gulimall-gateway
<dependency>
<groupId>com.zyn.glmall</groupId>
<artifactId>glmall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
1 在pom.xml引入
版本環(huán)境需保持一致
<spring-boot.version>2.1.8.RELEASE</spring-boot.version>
<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
2 開啟注冊(cè)服務(wù)發(fā)現(xiàn)@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
public class GulimallGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallGatewayApplication.class, args);
}
}
3 配置nacos注冊(cè)中心地址applicaion.properties
spring.application.name=glmall-gateway
spring.cloud.nacos.discovery.server-addr=192.168.11.1:8848
server.port=88
4 bootstrap.properties 填寫配置中心地址
spring.application.name=glmall-coupon
spring.cloud.nacos.config.server-addr=192.168.11.1:8848
spring.cloud.nacos.config.namespace=a791fa0e-cef8-47ee-8f07-5ac5a63ea061
5 nacos里創(chuàng)建命名空間gateway,然后在命名空間里創(chuàng)建文件glmall-gateway.yml
spring:
application:
name: glmall-gateway
6 在項(xiàng)目里創(chuàng)建application.yml
spring:
cloud:
gateway:
routes:
- id: baidu_route
uri: http://www.baidu.com
predicates:
- Query=url,baidu
- id: test_route
uri: http://www.qq.com
predicates:
- Query=url,qq
測(cè)試 localhost:8080?url=baidu # 跳到百度頁(yè)面
測(cè)試 localhost:8080?url=baidu # 跳到qq頁(yè)面