Dapr 交通流量控制示例
Dapr 已在塔架就位 將發(fā)射新一代微服務(wù)
牛年 dotnet云原生技術(shù)趨勢
Dapr是如何簡化微服務(wù)的開發(fā)和部署
前面幾篇文章都是從大的方面給大家分享Dapr 能幫助我們解決什么問題,微軟從開源到1.0 也是經(jīng)過2年的時(shí)間開發(fā),因此我寫了這幾篇文章也只能是帶領(lǐng)大家對Dapr 有個(gè)大的印象,真正對Dapr 有認(rèn)知上的直觀感受還是要從示例代碼中去體驗(yàn)了,因此今天給大家分享一個(gè)交通控制的示例程序,幫助大家對Dapr 的理解更進(jìn)一步。2020年的中國.NET開發(fā)者峰會(huì)朱永光有專門介紹了Dapr,他的演講中也引用了這個(gè)示例,朱永光的演講視頻請看:https://live.csdn.net/room/dotnetconf/1v1d3YbH 。這個(gè)示例是github上的一位荷蘭的 MVP 寫的https://github.com/EdwinVW/dapr-traffic-control?,我把它翻譯成中文介紹給大家,示例的場景是用于使用 Dapr 模擬流量控制系統(tǒng)。對于此示例,我們將使用超速攝像頭裝置,該裝置可在多個(gè)荷蘭高速公路上找到。在某條高速公路的整個(gè)長度上,將測量車輛的平均速度,如果該平均速度高于該高速公路上的超速極限,則該車輛的駕駛員會(huì)收到超速罰單。
概述
這是我在此示例中模擬的虛構(gòu)設(shè)置的概述:
每個(gè)泳道有1個(gè)進(jìn)入相機(jī)和1個(gè)離開相機(jī)。當(dāng)汽車通過入口攝像機(jī)時(shí),將注冊該汽車的車牌號(hào)。
在后臺(tái),通過調(diào)用汽車部門的Dvd服務(wù)(DMV(或荷蘭語中的RDW))獲取有關(guān)車輛的信息。
當(dāng)汽車通過出口攝像機(jī)時(shí),系統(tǒng)會(huì)對其進(jìn)行記錄。然后,系統(tǒng)根據(jù)進(jìn)出時(shí)間戳記計(jì)算汽車的平均速度。如果檢測到超速違規(guī),則會(huì)向中央司法征收機(jī)構(gòu)發(fā)送一條消息-CJCA(或荷蘭語中的CJIB)會(huì)將超速罰單發(fā)送給車輛駕駛員。
模擬
為了在代碼中進(jìn)行模擬,可以使用以下服務(wù):
Simulation?是一個(gè) .NET Core 控制臺(tái)程序模擬過路車.
TrafficControlService?是一個(gè)ASP.NET Core的WebAPI的應(yīng)用程序,提供2個(gè)端點(diǎn):?Entrycam?和?ExitCam.
Government?服務(wù)是一個(gè)ASP.NET Core的WebAPI的應(yīng)用程序,提供2個(gè)端點(diǎn):RDW(檢索車輛信息)和CJIB(用于發(fā)送超速罰單)
下面的序列圖描述了仿真的工作方式:
Simulation?模擬生成汽車車牌號(hào)并發(fā)送一個(gè)消息?VehicleRegistered?(包含汽車車牌號(hào), 一個(gè)隨機(jī)的泳道 (1-3) 和時(shí)間戳) 到服務(wù)?TrafficControlService?的端點(diǎn)?EntryCam?.
TrafficControlService?調(diào)用?GovernmentService?服務(wù)的?RDW?的端點(diǎn) 檢索對應(yīng)的汽車號(hào)牌車輛的品牌和型號(hào)
TrafficControlService?在 state-store 里 存儲(chǔ)VehicleState (車輛信息和進(jìn)入時(shí)間戳) .
一些隨機(jī)間隔之后,?Simulation?發(fā)送?VehicleRegistered?消息到?TrafficControlService?服務(wù)的端點(diǎn)?ExitCam?(含有在步驟1中產(chǎn)生的汽車號(hào)牌,隨機(jī)出口車道(1-3)和出口時(shí)間戳).
TrafficControlService?從state-store中獲取 VehicleState .
TrafficControlService使用 進(jìn)入和出去的時(shí)間戳 計(jì)算平均速度.
如果平均速度高于速度極限時(shí),?TrafficControlService?將發(fā)送?SpeedingViolationDetected?消息 (包含車輛的車票,路面的標(biāo)識(shí)符,高速化違反KMH和違規(guī)的時(shí)間戳) 到?GovernmentService?的端點(diǎn)?CJIB?.
GovernmentService?計(jì)算超速違章罰款和模擬發(fā)送超速票給車主
在執(zhí)行過程中,此序列中描述的所有操作都會(huì)記錄到控制臺(tái),因此您可以按照流程進(jìn)行操作。
Dapr
此示例使用 Dapr 實(shí)現(xiàn)應(yīng)用程序的多個(gè)方面。在下面的圖中,看到的是架構(gòu)概述
對于通信消息, 使用?發(fā)布和訂閱?構(gòu)建塊來實(shí)現(xiàn).
對于 request/response 型的服務(wù)通信 ,使用?服務(wù)到服務(wù)調(diào)用?構(gòu)建塊來實(shí)現(xiàn).
對于車輛狀態(tài)的存儲(chǔ),使用?狀態(tài)管理?構(gòu)建塊來實(shí)現(xiàn).
服務(wù)GovernmentService 中的?VehicleInfoController?有一個(gè)操作?GetVehicleInfo?使用VehicleInfoRepository?獲取車輛數(shù)據(jù). 這個(gè) repository 的構(gòu)造函數(shù)需要一個(gè)連接字符串作為參數(shù)。這個(gè)連接字符串存儲(chǔ)在一個(gè)secrets 文件里。服務(wù) GovernmentService 使用?secrets management?構(gòu)建塊帶一個(gè)本地文件組件來獲取連接字符串.
在這個(gè)例子里, Redis 組件既用于狀態(tài)管理,又用于 pub/sub.
使用 Dapr 的 self-hosted 模式運(yùn)行示例
執(zhí)行以下步驟以在自托管模式下運(yùn)行示例應(yīng)用程序:
確保你已經(jīng)在你的計(jì)算機(jī)上 安裝Dapr的 self-hosted 模式,具體參考文檔 Dapr documentation,中文的請看朱永光寫的 Dapr微服務(wù)應(yīng)用開發(fā)系列1:環(huán)境配置.
打開三個(gè)獨(dú)立的命令行窗口.
在第一個(gè)命令行Shell, 切換當(dāng)前路徑到 倉庫 的?src/GovernmentService?文件夾 執(zhí)行下面的命令行(使用Dapr CLI)運(yùn)行?GovernmentService:
dapr run --app-id governmentservice --app-port 6000 --dapr-grpc-port 50002 --config ../dapr/config/config.yaml --components-path ../dapr/components dotnet run在第二個(gè)命令行Shell, 切換當(dāng)前路徑到倉庫的?src/TrafficControlService?文件夾 執(zhí)行下面的命令(使用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在第三個(gè)命令行Shell, 切換當(dāng)前路徑到倉庫的?src/Simulation?文件夾 執(zhí)行下面的命令運(yùn)行?Simulation:
dapr run --app-id simulation --dapr-grpc-port 50003 --config ../dapr/config/config.yaml --components-path ../dapr/components dotnet run現(xiàn)在,您應(yīng)該會(huì)看到每個(gè) shell 中的日志記錄,類似于如下所示的日志記錄:
Simulation:
TrafficControlService:
GovernmentService:
相關(guān)文章:
Dapr 已在塔架就位 將發(fā)射新一代微服務(wù)
牛年 dotnet云原生技術(shù)趨勢
Dapr是如何簡化微服務(wù)的開發(fā)和部署
總結(jié)
以上是生活随笔為你收集整理的Dapr 交通流量控制示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 很遗憾,总对工作挑挑拣拣的家伙,一般结局
- 下一篇: 我计划搞直播了,欢迎来一起聊一聊