前面几篇文章都是从大的方面给你们分享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: