這篇文章,主要介紹微服務(wù)組件之Gateway服務(wù)網(wǎng)關(guān)基礎(chǔ)環(huán)境搭建、高可用網(wǎng)關(guān)環(huán)境搭建。
目錄
一、Gateway服務(wù)網(wǎng)關(guān)
1.1、什么是Gateway
1.2、Gateway基礎(chǔ)環(huán)境搭建
(1)基礎(chǔ)環(huán)境介紹
(2)引入依賴
(3)添加路由配置信息
(4)運(yùn)行測(cè)試
1.3、Gateway三個(gè)核心概念
1.4、Gateway配置信息
(1)routes路由信息配置
(2)defaultFilters默認(rèn)過(guò)濾器配置
(3)predicates斷言配置
1.5、高可用網(wǎng)關(guān)環(huán)境搭建
(1)搭建nginx環(huán)境
(2)創(chuàng)建兩個(gè)Gateway工程
一、Gateway服務(wù)網(wǎng)關(guān)
1.1、什么是Gateway
在微服務(wù)架構(gòu)里面,會(huì)存在很多的微服務(wù)應(yīng)用程序,這些服務(wù)集群部署在一起對(duì)外提供服務(wù),一般實(shí)際開發(fā)中,都會(huì)通過(guò)一個(gè)公共的入口地址將微服務(wù)應(yīng)用暴露給客戶端,這個(gè)公共的入口將其單獨(dú)作為一個(gè)微服務(wù)應(yīng)用,這個(gè)應(yīng)用程序就叫做:服務(wù)網(wǎng)關(guān),常見(jiàn)的網(wǎng)關(guān)有:zuul、Gateway等,其中Gateway的出現(xiàn)就是為了替代zuul網(wǎng)關(guān)。基于網(wǎng)關(guān),可以實(shí)現(xiàn)統(tǒng)一用戶認(rèn)證、統(tǒng)一權(quán)限校驗(yàn)、接口限流、服務(wù)降級(jí)、接口調(diào)用統(tǒng)計(jì)、協(xié)議適配等功能。
有五種實(shí)現(xiàn)網(wǎng)關(guān)功能的方案,分別是:
- 第一種:nginx + Lua。
- 第二種:Kong。
- 第三種:Traefik。
- 第四種:Spring Cloud Netflix Zuul。
- 第五種:Spring Cloud Gateway。
1.2、Gateway基礎(chǔ)環(huán)境搭建
(1)基礎(chǔ)環(huán)境介紹
這篇文章搭建的基礎(chǔ)環(huán)境主要包含下面幾個(gè)工程:
- 注冊(cè)中心:eureka服務(wù)端(直接使用前幾篇文章的應(yīng)用程序)。
- 服務(wù)提供者:搭建一個(gè)服務(wù)消費(fèi)者(consumer-client)、一個(gè)服務(wù)提供者(provider-client)(直接使用前幾篇文章的應(yīng)用程序)。
- 網(wǎng)關(guān)工程(gateway-server):搭建Gateway網(wǎng)關(guān)工程(這篇文章需要?jiǎng)?chuàng)建的新工程)。
(2)引入依賴
- 創(chuàng)建一個(gè)【gateway-server】工程,引入【gateway】依賴。
<!-- 引入 Gateway 依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
(3)添加路由配置信息
server:
port: 8888
spring:
application:
name: gateway-server
# 配置 gateway 路由信息
cloud:
gateway:
# 指定路由信息
routes:
- id: consumer-client # 路由唯一標(biāo)識(shí),一般和微服務(wù)應(yīng)用名稱相同即可
# 目標(biāo)路由的服務(wù)地址,這里采用的是靜態(tài)路由(將微服務(wù)的地址寫死在配置文件里面)
uri: http://localhost:8081/
# 配置斷言,也就是請(qǐng)求的URI滿足哪些規(guī)則,才可以匹配當(dāng)前這個(gè)routes路由信息
predicates:
# 這里使用路由斷言,所有 /api/consumer 開頭的請(qǐng)求,都將轉(zhuǎn)發(fā)到 http://localhost:8081/ 這個(gè)服務(wù)上面
- Path=/api/consumer/**
(4)運(yùn)行測(cè)試
依次啟動(dòng)eureka、consumer-client、provider-client、gateway-server四個(gè)工程,打開postman,訪問(wèn)gateway-server網(wǎng)關(guān)工程訪問(wèn)接口【http://localhost:8888/api/consumer/getUserInfo?username=csdn2023】,此時(shí)可以正常返回響應(yīng)結(jié)果,就表示網(wǎng)關(guān)工程的基礎(chǔ)環(huán)境就搭建成功。
1.3、Gateway三個(gè)核心概念
Gateway網(wǎng)關(guān)中,有三個(gè)重要的核心概念,分別是:路由Routes、斷言Predicates、過(guò)濾器Filter。路由Routes是Gateway網(wǎng)關(guān)中最基本的一個(gè)組成部分,它主要負(fù)責(zé)定義微服務(wù)的路由信息,它是由路由ID、目標(biāo)URI、一組斷言、一組過(guò)濾器組成的。
當(dāng)客戶端一個(gè)請(qǐng)求到達(dá)Gateway網(wǎng)關(guān)的時(shí)候,首先會(huì)被Gateway Handler Mapping處理,根據(jù)URI找到能夠匹配的Routes路由信息,然后將路由信息發(fā)送到Global Web Handler進(jìn)行微服務(wù)應(yīng)用程序的接口調(diào)用,調(diào)用之前會(huì)經(jīng)過(guò)一系列的Filter,接口調(diào)用成功之后,也會(huì)經(jīng)過(guò)一系列的Filter,最終返回給客戶端,這就是Gateway網(wǎng)關(guān)的一個(gè)大致工作原理。
斷言是指定路由信息滿足哪些規(guī)則時(shí)候,才會(huì)匹配成功,簡(jiǎn)單的理解為,斷言就是一系列的if判斷語(yǔ)句,只有當(dāng)前客戶端請(qǐng)求滿足條件的時(shí)候,才能夠找到這個(gè)路由信息,然后根據(jù)這個(gè)路由信息去調(diào)用微服務(wù)。
過(guò)濾器Filter是在調(diào)用微服務(wù)的過(guò)程中,可以在過(guò)濾器中增加一些額外的操作,比如:增加header頭信息、去掉某些請(qǐng)求參數(shù)等等,有兩種類型的過(guò)濾器:Gateway Filter路由過(guò)濾器 和 Global Filter全局過(guò)濾器。
1.4、Gateway配置信息
在GatewayProperties類中定義了Gateway網(wǎng)關(guān)相關(guān)的配置信息,其中大致包含:routes、defaultFilters、streamingMediaTypes等信息,如下所示:
(1)routes路由信息配置
其中routes是最關(guān)鍵的配置信息,用于定義路由信息,每一個(gè)路由信息都被抽象成了RouteDefination對(duì)象,這個(gè)類中包含:id、uri、order、predicates、filters、metadata。
id用于指定路由的唯一標(biāo)識(shí),一般和微服務(wù)名稱相同即可;uri用于指定目標(biāo)微服務(wù)的服務(wù)地址(可以指定具體的服務(wù)地址,也可以結(jié)合注冊(cè)中心實(shí)現(xiàn)動(dòng)態(tài)路由功能);order用于指定多種路由中的優(yōu)先級(jí);predicates用于指定斷言;filters用于設(shè)置過(guò)濾器;metedata用于設(shè)置元數(shù)據(jù)信息。
(2)defaultFilters默認(rèn)過(guò)濾器配置
Gateway給我們提供了一些默認(rèn)的過(guò)濾器,使用的時(shí)候通過(guò)defaultFilters屬性指定,每一個(gè)過(guò)濾器對(duì)象被抽象成一個(gè)FilterDefination類。
(3)predicates斷言配置
predicates屬性用于指定路由的斷言,滿足斷言的URI將匹配當(dāng)前這個(gè)路由信息。斷言可以有多個(gè),只要滿足其中一個(gè)條件,就可以匹配當(dāng)前這個(gè)路由信息,按照順序依次匹配,只要前面匹配成功了,后面的斷言就不會(huì)執(zhí)行了,每一個(gè)斷言對(duì)象都被抽象成了一個(gè)PredicateDefination類。
1.5、高可用網(wǎng)關(guān)環(huán)境搭建
在高并發(fā)的場(chǎng)景下,一臺(tái)Gateway網(wǎng)關(guān)服務(wù)沒(méi)辦法處理大量的請(qǐng)求,如果此時(shí)Gateway服務(wù)宕機(jī)了,那么整個(gè)微服務(wù)系統(tǒng)也將不可用,所以為了提高服務(wù)的可用性,需要對(duì)Gateway部署多臺(tái)服務(wù)結(jié)點(diǎn),也就是集群部署Gateway網(wǎng)關(guān)。
那這里就有一個(gè)問(wèn)題啦,客戶端應(yīng)該和哪個(gè)Gateway進(jìn)行交互呢???為了解決這個(gè)問(wèn)題,就需要借助于Nginx服務(wù)器來(lái)實(shí)現(xiàn)請(qǐng)求的分發(fā),將請(qǐng)求依次分發(fā)到不同的Gateway網(wǎng)關(guān)中,從而實(shí)現(xiàn)高可用的網(wǎng)關(guān)環(huán)境。
(1)搭建nginx環(huán)境
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream gateway {
server 127.0.0.1:8888;
server 127.0.0.1:9999;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location /api-gateway {
# 負(fù)載均衡
proxy_pass http://gateway;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
(2)創(chuàng)建兩個(gè)Gateway工程
要實(shí)現(xiàn)Gateway網(wǎng)關(guān)的高可用,就需要部署多臺(tái)網(wǎng)關(guān)工程,然后通過(guò)nginx請(qǐng)求轉(zhuǎn)發(fā),指定通過(guò)哪一臺(tái)Gateway網(wǎng)關(guān)進(jìn)行請(qǐng)求處理。采用這種模式搭建的Gateway網(wǎng)關(guān),就可以實(shí)現(xiàn)高可用,即使其中一臺(tái)Gateway宕機(jī)了,也有其他的Gateway可以繼續(xù)提高服務(wù)。
到此, Gateway服務(wù)網(wǎng)關(guān)的基礎(chǔ)環(huán)境、高可用網(wǎng)關(guān)環(huán)境搭建就搭建完啦。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-732925.html
綜上,這篇文章結(jié)束了,主要介紹微服務(wù)組件之Gateway服務(wù)網(wǎng)關(guān)基礎(chǔ)環(huán)境搭建、高可用網(wǎng)關(guān)環(huán)境搭建。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-732925.html
到了這里,關(guān)于【微服務(wù)筆記16】微服務(wù)組件之Gateway服務(wù)網(wǎng)關(guān)基礎(chǔ)環(huán)境搭建、高可用網(wǎng)關(guān)環(huán)境搭建的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!