
如何快速實(shí)現(xiàn)REST API集成以優(yōu)化業(yè)務(wù)流程
注冊(cè)中心是服務(wù)要實(shí)現(xiàn)服務(wù)化管理的核心組件,類似于目錄服務(wù)的作用,也是微服務(wù)架構(gòu)中最基礎(chǔ)的設(shè)施之一,主要用來存儲(chǔ)服務(wù)信息,譬如服務(wù)提供者 URL 、路由信息等。注冊(cè)中心的實(shí)現(xiàn)是通過一種映射的方式,將復(fù)雜的服務(wù)端信息映射為簡單易懂的信息提供給客戶端。
注冊(cè)中心的核心功能為以下三點(diǎn):
注冊(cè)中心本質(zhì)上是為了解耦服務(wù)提供者和服務(wù)消費(fèi)者,在微服務(wù)體系中,各個(gè)業(yè)務(wù)服務(wù)之間會(huì)頻繁互相調(diào)用,并且需要對(duì)各個(gè)服務(wù)的 IP、port 等路由信息進(jìn)行統(tǒng)一的管理。但是要如何進(jìn)行管理呢?我們可以通過注冊(cè)中心的服務(wù)注冊(cè)功能將已有服務(wù)的相關(guān)信息提供到統(tǒng)一的注冊(cè)中心進(jìn)行管理。
通過上述描述,您可以了解到注冊(cè)中心可以幫助用戶通過映射快速找到服務(wù)和服務(wù)地址。隨著業(yè)務(wù)更新迭代,服務(wù)會(huì)頻繁發(fā)生變化,在服務(wù)端中注冊(cè)了新的服務(wù)或者服務(wù)宕機(jī)后,客戶端仍然可以通過注冊(cè)中心的服務(wù)發(fā)現(xiàn)功能拉取服務(wù)列表,如果注冊(cè)中心的服務(wù)節(jié)點(diǎn)發(fā)生變更,注冊(cè)中心會(huì)發(fā)送請(qǐng)求通知客戶端重新拉取。
如果服務(wù)端的服務(wù)突然宕機(jī),并且沒有向注冊(cè)中心反饋,客戶端可以通過注冊(cè)中心的健康檢查功能,進(jìn)行固定時(shí)間間隔的主動(dòng)上報(bào)心跳方式向服務(wù)端表明自己的服務(wù)狀態(tài)。如果服務(wù)狀態(tài)異常,則會(huì)通知注冊(cè)中心,注冊(cè)中心可以及時(shí)把已經(jīng)宕機(jī)的服務(wù)節(jié)點(diǎn)進(jìn)行剔除,避免資源的浪費(fèi)。
Apache APISIX + Nacos 可以將各個(gè)微服務(wù)節(jié)點(diǎn)中與業(yè)務(wù)無關(guān)的各項(xiàng)控制,集中在 Apache APISIX 中進(jìn)行統(tǒng)一管理,即通過 Apache APISIX 實(shí)現(xiàn)接口服務(wù)的代理和路由轉(zhuǎn)發(fā)的能力。在 Nacos 上注冊(cè)各個(gè)微服務(wù)后,Apache APISIX 可以通過 Nacos 的服務(wù)發(fā)現(xiàn)功能獲取服務(wù)列表,查找對(duì)應(yīng)的服務(wù)地址從而實(shí)現(xiàn)動(dòng)態(tài)代理。
本文操作基于以下環(huán)境進(jìn)行。
3005
端口啟動(dòng)一個(gè)簡單的測(cè)試服務(wù)作為上游(Upstream)。const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3005);
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=APISIX-NACOS&ip=127.0.0.1&port=3005&ephemeral=false'
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=APISIX-NACOS'
正確返回結(jié)果示例如下:
{
"name": "DEFAULT_GROUP@@APISIX-NACOS",
"groupName": "DEFAULT_GROUP",
"clusters": "",
"cacheMillis": 10000,
"hosts": [
{
"instanceId": "127.0.0.1#3005#DEFAULT#DEFAULT_GROUP@@APISIX-NACOS",
"ip": "127.0.0.1",
"port": 3005,
"weight": 1.0,
"healthy": true,
"enabled": true,
"ephemeral": true,
"clusterName": "DEFAULT",
"serviceName": "DEFAULT_GROUP@@APISIX-NACOS",
"metadata": {},
"instanceHeartBeatInterval": 5000,
"instanceHeartBeatTimeOut": 15000,
"ipDeleteTimeout": 30000,
"instanceIdGenerator": "simple"
}
],
"lastRefTime": 1643191399694,
"checksum": "",
"allIPs": false,
"reachProtectionThreshold": false,
"valid": true
}
使用 Apache APISIX 提供的 Admin API 創(chuàng)建一個(gè)新的路由(Route),APISIX 通過 upstream.discovery_type
字段選擇使用的服務(wù)發(fā)現(xiàn)類型,upstream.service_name
需要與注冊(cè)中心的對(duì)應(yīng)服務(wù)名進(jìn)行關(guān)聯(lián),因此創(chuàng)建路由時(shí)指定服務(wù)發(fā)現(xiàn)類型為 nacos
。
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
{
"uri": "/nacos/*",
"upstream": {
"service_name": "APISIX-NACOS",
"type": "roundrobin",
"discovery_type": "nacos"
}
}'
在上述命令中,請(qǐng)求頭 X-API-KEY
是 Admin API 的訪問 token,可以在 conf/config.yaml
文件中的 apisix.admin_key.key
查看。
添加成功后,正確返回結(jié)果示例如下:
{
"action": "set",
"node": {
"key": "\/apisix\/routes\/1",
"value": {
"update_time": 1643191044,
"create_time": 1643176603,
"priority": 0,
"uri": "\/nacos\/*",
"upstream": {
"hash_on": "vars",
"discovery_type": "nacos",
"scheme": "http",
"pass_host": "pass",
"type": "roundrobin",
"service_name": "APISIX-NACOS"
},
"id": "1",
"status": 1
}
}
}
除此之外,您還可以在 upstream.discovery_args
中傳遞其他服務(wù)相關(guān)參數(shù)用于指定服務(wù)所在的命名空間或組別,具體內(nèi)容可參考官方文檔。
使用以下命令發(fā)送請(qǐng)求至需要配置的路由。
curl -i http://127.0.0.1:9080/nacos/
正常返回結(jié)果示例如下:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 11
Connection: keep-alive
Date: Thu, 27 Jan 2022 00:48:26 GMT
Server: APISIX/2.12.0
Hello World
通過示例看到,Apache APISIX 中新增的路由已經(jīng)可以通過 Nacos 服務(wù)發(fā)現(xiàn)找到正確的服務(wù)地址,并正常響應(yīng)。
本文為大家介紹了注冊(cè)中心的概念以及 Apache APISIX 如何配合 Nacos 實(shí)現(xiàn)基于服務(wù)發(fā)現(xiàn)的路由代理。用戶可以根據(jù)自身的業(yè)務(wù)需求和過往技術(shù)架構(gòu)使用 Apache APISIX 與 Nacos,以實(shí)現(xiàn)接口服務(wù)的代理和路由轉(zhuǎn)發(fā)的能力。
關(guān)于 nacos
插件的更多說明和完整配置信息,可參考 Apache APISIX 官方文檔。
文章來源:Nacos’ Service Discovery Practice in API Gateway
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)