微服務實施筆記(四) 部署服務發現

2021-08-15 11:13:04 字數 2736 閱讀 1421

微服務實施筆記(四)——部署服務發現

上回書搭建了3個待用的服務。用來模擬實際中的服務。接下來就是把這幾個服務註冊到乙個服務管理中心了。

使用consul搭建服務管理中心

在這裡選用consul來做服務管理中心。consul是採用golang開發的,cap中滿足cp的一款服務管理系統。選擇它的原因就是它足夠簡單。簡單到什麼程度呢,一行**搞定:

sudo docker run -d \

-e 'consul_local_config=' \

--name=node1 -p 8300:8300 -p 8301:8301 -p 8301:8301/udp \

-p 8302:8302/udp -p 8302:8302 -p 8400:8400 -p 8500:8500 \

-p 53:53/udp -h consul_node1 \

consul agent -server -bootstrap \

-node=node1 -client 0.0.0.0 -ui

執行後在瀏覽器中檢視 http://localhost:8500/ui

就是如此簡單,而且自帶ui。好的軟體都應如此簡單。

consul 四大特性

service discovery (服務發現)

health check (健康檢查)

multi datacenter (多資料中心)

key/value storage(kv鍵值儲存)

下文在介紹如何利用這四大特性。

這下,待發現的服務有了,可以註冊服務的管理中心也有了,接下來怎麼辦呢,怎麼把服務註冊到服務中心呢。

自動註冊服務

服務註冊可以分為「自註冊」 與 「第三方註冊」兩種方式。

以下內容引用自

1.自註冊:服務內部啟動客戶端,連線註冊中心,寫入服務資訊。

好處:

問題:

第三方註冊需要乙個註冊工具,這裡使用registrator

依然是一行**搞定:

docker run -d \

--name=registrator \

--net=host \

--volume=/var/run/docker.sock:/tmp/docker.sock \

gliderlabs/registrator:latest \

consul://localhost:8500

這樣啟動的服務會有乙個問題,就是registrator無法準確取到ip位址,所以最好把本地ip位址指定給registrator。方法就是使用docker-compose。新建乙個docker-compose.yml檔案,內容如下:

version: '2'

services:

registrator1:

image: gliderlabs/registrator

restart: always

network_mode: "host"

name: registrator

volumes:

- /var/run/docker.sock:/tmp/docker.sock

command: "-ip 192.168.1.231 consul:"

其中最後一行ip後面就是容器執行的宿主機的本地ip位址。然後在docker-compose.yml檔案所在目錄下執行docker-compose ip -d命令。

執行之後重新整理下瀏覽器看看:

註冊成功。但是這裡只用到了consul四大特性中的第乙個服務發現,它的另乙個重要特性健康檢查並沒有被利用起來。健康檢查會按照配置的時間間隔和方式檢查服務的健康狀態。這樣就可以及時的剔除無法對外提供服務的服務了。那麼怎麼為服務配置健康檢查呢?修改服務程式本身當然可以,但是這樣的話就違背解耦合的初衷了。引入docker層就是為了解耦合用的,所以可以通過對dockerfile的配置來實現。

怎麼用呢,可以使用dockerfile的lable或者環境變數來進行配置。

對於server1服務的docker配置如下(詳細可以參考 和

以下是修改後的server1的daockerfile,其中通過環境變數增加了支援consul服務特性的配置項。

from microsoft/aspnetcore:2.0

label name=lizpen/server1 version=0.0.1

#以下環境變數用來定義consul的服務屬性

env service_name=server1

env service_id=server1.001

env service_tags=server1

#以下環境變數用來定義consul的服務檢查特性

entrypoint dotnet server1.dll

先刪除掉正在執行的容器,vscode側邊欄中的docker工具提供了這些功能,及其好用:

然後重新build docker映象,並執行生成好的映象。然後重新整理consul的管理**可以看到tags和健康檢查都上線了。

至此,服務發現在單機執行成功。

接下來就是把這套東西部署到搭建好的虛擬環境中去。

Spring Cloud 微服務實戰筆記

傳統開發所有業務邏輯都在乙個應用中,開發,測試,部署隨著需求增加會不斷為單個專案增加不同業務模組 前端展現也不侷限於html檢視模板的形式,後端向前端支援需要更多的介面模組。隨著需求增多,專案變大,單體系統部署在乙個程序內部,往往修改很小的功能,為了部署上線也會影響其他功能。後期維護成本會變得越來越...

JavaScript筆記(第四部分)

命 名 空 間 管理變數,防止汙染全域性,適用於模組開發 之 前 的 解 決 辦 方 已經不用 命名空間 var org xuming department2 lisi 了解即可 用 法 org.department1.jicheng.name 簡化 var jc org.department1.j...

微服務實戰(四) 配置中心的使用 Nacos

在微服務架構中,每個微服務應用都有自己的應用外部配置,在以前大多是使用配置檔案或者資料庫的形式和應用一起部署,而在springcloud體系下,需要有乙個配置中心,專門管理各個微應用的配置資訊,並且配置發生更新後,所有微應用都能馬上讀取到最新的配置。解決了每個應用都要去手動維護配置的不便。上一章節中...