通過使用服務調用,您的應用程序可以使用標準的gRPC或HTTP協議與其他應用程序可靠、安全地通信。
先問幾個問題:
此時妳會發現這些事情HttpClientFactory沒有幫妳完成,而在微服務中這些又是必不可少的能力,接下來看看服務調用都做了什麽
先看壹下兩個服務之間的調用順序
默認情況下,調用同壹個命名空間的其他服務可以直接使用AppID(假設是:nodeapp)
服務調用也支持跨命名空間調用,在所有受支持的宿主平臺上,Dapr AppID遵循FQDN格式,其中包括目標命名空間。
比如調用命名空間:production,AppID:nodeapp
這在K8s集群中的跨名稱空間調用中特別有用
通過托管平臺上的相互(mTLS)身份驗證,包括通過Dapr Sentry服務的自動證書轉移,可以確保Dapr應用程序之間的所有調用的安全。 下圖顯示了自托管應用程序的情況。
應用程序可以控制哪些其他應用程序可以調用它們,以及通過訪問策略授權它們做什麽。 這使您能夠限制具有個人信息的敏感應用程序不被未經授權的應用程序訪問,並結合服務到服務的安全通信,提供了軟多租戶部署。
在調用失敗和瞬態錯誤的情況下,服務調用執行自動重試,並在回退時間段內執行。
註: 自動重試,默認是開啟的,可以關。但如果不關且業務又不支持冪等是很危險的。建議服務的接口要設計支持冪等,這在微服務裏也是壹個標配的選擇。
Dapr可以在各種托管平臺上運行。 為了啟用服務發現和服務調用,Dapr使用可插拔的名稱解析組件。 例如,K8s名稱解析組件使用K8s DNS服務來解析集群中運行的其他應用程序的位置。 自托管機器可以使用mDNS名稱解析組件。 Consul名稱解析組件可以在任何托管環境中使用,包括K8s或自托管環境
壹圖勝千言,就使用mDNS輪著調用
默認情況下,將跟蹤應用程序之間的所有調用,並收集指標,以提供應用程序的洞察力和診斷,這在生產場景中尤其重要。 這為您提供了服務之間調用的調用圖和指標。
pythonapp 通過Dapr sidecar調用nodeapp,通過服務調用的API及gRPC代理依然是上面見到的那個調用流程,做到了語言無關
創建 ASP.NET Core空 項目,並修改 launchSettings.json ,讓啟動HTTP的啟動端口變為5000
修改 Program.cs 文件
此時壹***有4個服務
運行 Assignment.Server :在目錄 dapr-study-room\Assignment04\Assignment.Server 打開命令行工具,並執行下面命令
調用服務:再打開壹個新的命令行工具,並執行下面命令
可以發現4個命令都調用成功了,但是 Assignment.Server 輸出結果有點意外
是的,沒有 Hello World1! ,那怎麽辦呢?我們把Hello1的命令改壹下
invoke調用的輸出除了 App invoked successfully 以外還多了壹行 Hello World1!
與此同時 Assignment.Server 的輸出正確了
除此之外 invoke 還有壹些參數,比如 --data , --data-file ,喜歡研究Dapr CLI的小夥伴可以繼續嘗試。不過壹般情況下用SDK就可以了
創建 控制臺應用程序 項目,使用NuGet包管理器添加 Dapr.Client SDK,並修改 Program.cs 文件
看幾個細節
註:
使用命令行工具打開目錄 dapr-study-room\Assignment04\Assignment.Client ,然後執行命令
如果妳不是用VS Code終端的PowerShell執行dapr run就可能遇到下面的錯誤
即便妳沒有遇到也建議了解壹下如何支持非默認端口
因為上面使用dapr run的時候沒有指定dapr /doddgu/dapr-study-room
我們的目標是 自由的 、 易用的 、 可塑性強的 、 功能豐富的 、 健壯的 。
所以我們借鑒Building blocks的設計理念,正在做壹個新的框架 MASA Framework ,它有哪些特點呢?
目前源碼已開始同步到Github(文檔站點在規劃中,會慢慢完善起來):
MASA.BuildingBlocks
MASA.Contrib
MASA.Utils
MASA.EShop
BlazorComponent
MASA.Blazor
QQ群:7424099
微信群:加技術運營微信(MasaStackTechOps),備註來意,邀請進群