前面幾篇文章都是從大的方面給你們分享Dapr 能幫助咱們解決什麼問題,微軟從開源到1.0 也是通過2年的時間開發,所以我寫了這幾篇文章也只能是帶領你們對Dapr 有個大的印象,真正對Dapr 有認知上的直觀感覺仍是要從示例代碼中去體驗了,所以今天給你們分享一個交通控制的示例程序,幫助你們對Dapr 的理解更進一步。 2020年的中國.NET開發者峯會朱永光有專門介紹了Dapr,他的演講中也引用了這個示例,朱永光的演講視頻請看:https://live.csdn.net/room/dotnetconf/1v1d3YbH 。這個示例是github上的一位荷蘭的 MVP 寫的 https://github.com/EdwinVW/dapr-traffic-control ,我把它翻譯成中文介紹給你們,示例的場景是用於使用 Dapr 模擬流量控制系統。對於此示例,咱們將使用超速攝像頭裝置,該裝置可在多個荷蘭高速公路上找到。在某條高速公路的整個長度上,將測量車輛的平均速度,若是該平均速度高於該高速公路上的超速極限,則該車輛的駕駛員會收到超速罰單。html
這是我在此示例中模擬的虛構設置的概述:git
每一個泳道有1個進入相機和1個離開相機。當汽車經過入口攝像機時,將註冊該汽車的車牌號。github
在後臺,經過調用汽車部門的Dvd服務(DMV(或荷蘭語中的RDW))獲取有關車輛的信息。shell
當汽車經過出口攝像機時,系統會對其進行記錄。而後,系統根據進出時間戳記計算汽車的平均速度。若是檢測到超速違規,則會向中央司法徵收機構發送一條消息-CJCA(或荷蘭語中的CJIB)會將超速罰單發送給車輛駕駛員。架構
爲了在代碼中進行模擬,可使用如下服務:併發
下面的序列圖描述了仿真的工做方式:app
在執行過程當中,此序列中描述的全部操做都會記錄到控制檯,所以您能夠按照流程進行操做。函數
此示例使用 Dapr 實現應用程序的多個方面。在下面的圖中,看到的是架構概述微服務
VehicleInfoController
有一個操做 GetVehicleInfo
使用VehicleInfoRepository
獲取車輛數據. 這個 repository 的構造函數須要一個鏈接字符串做爲參數。 這個鏈接字符串存儲在一個secrets 文件裏。 服務 GovernmentService 使用 secrets management 構建塊帶一個本地文件組件來獲取鏈接字符串.在這個例子裏, Redis 組件既用於狀態管理,又用於 pub/sub..net
執行如下步驟以在自託管模式下運行示例應用程序:
確保你已經在你的計算機上 安裝Dapr的 self-hosted 模式,具體參考文檔 Dapr documentation,中文的請看朱永光寫的 Dapr微服務應用開發系列1:環境配置.
打開三個獨立的命令行窗口.
在第一個命令行Shell, 切換當前路徑到 倉庫 的 src/GovernmentService 文件夾 執行下面的命令行(使用Dapr CLI)運行 GovernmentService:
dapr run --app-id governmentservice --app-port 6000 --dapr-grpc-port 50002 --config ../dapr/config/config.yaml --components-path ../dapr/components dotnet run
在第二個命令行Shell, 切換當前路徑到倉庫的 src/TrafficControlService 文件夾 執行下面的命令(使用Dapr CLI) TrafficControlService:
dapr run --app-id trafficcontrolservice --app-port 5000 --dapr-grpc-port 50001 --config ../dapr/config/config.yaml --components-path ../dapr/components dotnet run
在第三個命令行Shell, 切換當前路徑到倉庫的 src/Simulation 文件夾 執行下面的命令運行 Simulation:
dapr run --app-id simulation --dapr-grpc-port 50003 --config ../dapr/config/config.yaml --components-path ../dapr/components dotnet run
如今,您應該會看到每一個 shell 中的日誌記錄,相似於以下所示的日誌記錄:
Simulation:
TrafficControlService:
GovernmentService: