若您 不知道什麼是 Dapr 或 尚未安裝環境,您可以先閱讀 Dapr 基礎觀念介紹與建立環境 這篇文章。
Dapr 服務調用 (Service invocation) 為建構一個 Dapr instance ,以 Sidecar 模式與應用程式進行溝通。透過 Sidecar 模式,您不需要加入任何程式碼到你的應用程式,降低整合難度並提高擴充性。在微服務的世界,要正確、安全且可靠 (如:重試、取得目前狀態、診斷問題...等) 的呼叫不同服務相當不容易,透過 服務調用,您可以更輕鬆的管理應用程式。
服務調用運作原理
過去,我們會使用 HTTP 或 gRPC 標準通訊協定直接應用程式直接進行互動。但在 Dapr 的架構下,我們則是透過呼叫 Dapr Runtime 與應用程式進行互動。如前面所提到的,多出來的這一層 Dapr Runtime 我們稱為邊車模式 (Sidecar Pattern),可以為您的應用程式增加額外的管理服務(如: 狀態管理、失敗重試、身分驗證與問題診斷...等),而不需要修改既有程式碼。
那讀者一定會問,我該如何與 Dapr Runtime 進行溝通呢?
您可以透過 Dapr 內建的 來使用 Dapr Runtime (HTTP 與 gRPC 通訊協定),其 URL 格式如下:
<dapr-port> Dapr 聆聽的 HTTP Port
<application-id> 要呼叫的應用程式 ID (Dapr 啟動時給的名稱)
<method-name> 要呼叫應用程式的方法名稱
接下來,我們起一個 .NET Core WebAPI 應用程式來說明,讓您更快了解 Invoke API 與 原有 WebAPI 如何對應
第一個 Dapr 服務 - 以 .NET Core WebAPI 為例
在執行下列範例前,請先確認已經安裝 .NET Core 3.1 SDK (或更高) 版本
首先,我們要建立一個 .NET Core WebAPI 應用程式
以管理者身分開啟命令提示字元,輸入 dotnet new webapi -n WebAPI --no-https 建立專案
切換目錄至 WebAPI,輸入 cd WebAPI
接下來,輸入指令 dotnet run --urls=http://localhost:5000/ 啟動專案
接下來我們進行測試 (你可以開啟瀏覽器、Postman 或 PowerSehll ..等。任何可以測試 WebAPI 的工具皆可),我們服務啟動的位置為 http://localhost:5000,而 API Path 為 WeatherForecast 。我們開啟 PowerShell ,直接輸入下列指令進行測試
Invoke-WebRequest -URI http://localhost:5000/WeatherForecast -UseBasicParsing
確認回傳訊息沒問題後,我們完成了 WebAPI 建立,在原來的命令提示字元按下 Ctrl + c 關閉應用程式。
接下來,我們要使用 Dapr 啟動 WebAPI,達到服務調用效果...。輸入指令方式有兩種(則一即可):
dapr run --app-id <自己取名的app-id> --app-port <應用程式 port> --dapr-http-port <dapr port> -- dotnet run
以我的範例為
dapr run --app-id webapi --app-port 5000 --dapr-http-port 3500 -- dotnet run --urls=http://localhost:5000/
另一種啟動方式是使用指令: dotnet 應用程式.dll,範例如下:
dapr run --app-id <自己取名的app-id> --app-port <應用程式 port> --dapr-http-port <dapr port> -- dotnet <path-to-dll> --urls=http://localhost:5000/
以我的範例為
dapr run --app-id webapi --app-port 5000 --dapr-http-port 3500 -- dotnet bin\Debug\net6.0\WebAPI.dll --urls=http://localhost:5000/
您可以另開命令提示字元,輸入 dapr list 確認服務運作狀態
Dapr Invoke API 完整 URL為 http://localhost:3500/v1.0/invoke/webapi/method/WeatherForecast,其中
<dapr-port> 3500
<application-id> webapi
<method-name> WeatherForecast
開啟 PowerShell ,直接輸入下列指令進行測試,確認服務可以正常呼叫,也回傳相同的結果,即可以驗證前文所提到的,透過 invoke api 方式,讓 dapr 調用應用程式的服務
Invoke-WebRequest -URI http://localhost:3500/v1.0/invoke/webapi/method/WeatherForecast -UseBasicParsing
0 留言