Proto.Actor 中的 EventStream 详解:简化 Actor 之间的发布/订阅通信

简介  

Proto.Actor 提供了一项名为 `EventStream` 的强大功能,它作为 多通道发布/订阅调度器。本文探讨如何利用此机制实现 Actor 之间的事件驱动通信。

事件流(Event Stream)  

EventStream 在 Proto.Actor 中实现了 发布/订阅模式,允许 Actor(通过其进程 ID,即 PID 标识)订阅特定的事件类型。它也是管理基础设施事件(如未送达消息,例如 DeadLetter 处理)的关键组件。  

![pub/sub](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/73a7jky1kph09bxabo5g.png)    

要求  

Actor 示例  

本示例实现两个 Actor 以演示事件驱动的交互。

OrderActor  

OrderActor 创建订单并通过 EventS

INFO: <generic>: Starting controller: F:\qianruzuzhengshipeixun\webotssss\Webots\resources\projects\controllers\generic\generic.exe ERROR: “F:/qianruzuzhengshipeixun/webotsxiangmu/macnum/protos/InteriorWheel.proto”:34:9:错误:Skipped unknown 'WheelMesh' node or PROTO. {1'?} {2:9:?} ERROR: “F:/qianruzuzhengshipeixun/webotsxiangmu/macnum/protos/InteriorWheel.proto”:40:13:错误:Skipped unknown 'SubWheelMesh' node or PROTO. {1'?} {2:13:?} ERROR: “F:/qianruzuzhengshipeixun/webotsxiangmu/macnum/protos/InteriorWheel.proto”:48:13:错误:Skipped unknown 'SubWheelMesh' node or PROTO. {1'?} {2:13:?} ERROR: “F:/qianruzuzhengshipeixun/webotsxiangmu/macnum/protos/InteriorWheel.proto”:56:13:错误:Skipped unknown 'SubWheelMesh' node or PROTO. {1'?} {2:13:?} ERROR: “F:/qianruzuzhengshipeixun/webotsxiangmu/macnum/protos/InteriorWheel.proto”:64:13:错误:Skipped unknown 'SubWheelMesh' node or PROTO. {1'?} {2:13:?} ERROR: “F:/qianruzuzhengshipeixun/webotsxiangmu/macnum/protos/InteriorWheel.proto”:72:13:错误:Skipped unknown 'SubWheelMesh' node or PROTO. {1'?} {2:13:?} ERROR: “F:/qianruzuzhengshipeixun/webotsxiangmu/macnum/protos/InteriorWheel.proto”:80:13:错误:Skipped unknown 'SubWheelMesh' node or PROTO. {1'?} {2:13:?} ERROR: “F:/qianruzuzhengshipeixun/webotsxiangmu/macnum/protos/InteriorWheel.proto”:34:9:错误:Skipped unknown 'WheelMesh' node or PROTO. {1'?} {2:9:?} ERROR: “F:/qianruzuzhengshipeixun/webotsxiangmu/macnum/protos/InteriorWheel.proto”:40:13:错误:Skipped unknown 'SubWheelMesh' node or PROTO. {1'?} {2:13:?} ERROR: “F:/qianruzuzhengshipeixun/webotsxiangmu/macnum/protos/InteriorWheel.proto”:48:13:错误:Skipped unknown 'SubWheelMesh' node or PROTO. {1'?} {2:13:?} ERROR: “F:/qianruzuzhengshipeixun/webotsxiangmu/macnum/protos/InteriorWheel.proto”:56:13:错误:Skipped unknown 'SubWheelMesh' node or PROTO. {1'?} {2:13:?} ERROR: “F:/qianruzuzhengshipeixun/webotsxiangmu/macnum/protos/InteriorWheel.proto”:64:13:错误:Skipped unknown 'SubWheelMesh' node or PROTO. {1'?} {2:13:?} ERROR: “F:/qianruzuzhengshipeixun/webotsxi
07-08
在Webots仿真环境中,加载PROTO文件时出现的“ERROR: Skipped unknown node or PROTO”错误通常表明Webots无法识别某个节点或PROTO定义。这种问题可能由多种原因引起,包括PROTO文件路径配置错误、PROTO名称拼写不一致、依赖项未正确声明等。 ### 错误分析 当Webots报告`WheelMesh SubWheelMesh`未知节点错误时,意味着它在解析当前PROTO文件时遇到了一个名为`SubWheelMesh`的节点或PROTO,但未能找到其定义或无法正确加载该定义[^1]。这种情况常见于以下几种情形: - **PROTO定义缺失或路径错误**:`SubWheelMesh.proto`文件未放置在正确的目录中,或者其路径未被Webots项目正确引用。 - **拼写错误或大小写不一致**:PROTO文件名与其内部定义的节点名称不一致,尤其是在区分大小写的系统上(如Linux)。 - **依赖PROTO未导入**:如果`SubWheelMesh.proto`依赖于其他PROTO文件,则这些依赖项未在`SubWheelMesh.proto`中通过`import`语句引入。 - **PROTO结构不完整或语法错误**:PROTO文件本身存在语法错误或结构不完整,导致Webots无法正确解析。 ### 解决方案 为了解决此类问题,可以采取以下措施: #### 1. 检查PROTO文件路径与命名一致性 确保`SubWheelMesh.proto`文件位于项目的`protos`目录下,并且其内部定义的节点名称与文件名完全一致。例如,若文件名为`SubWheelMesh.proto`,则其内部应包含如下定义: ```proto # SubWheelMesh.proto PROTO SubWheelMesh [ field SFVec3f translation 0 0 0 field SFRotation rotation 0 0 1 0 ] { # Node definition here } ``` #### 2. 确保所有依赖项已正确导入 如果`SubWheelMesh.proto`使用了其他PROTO节点(如`Solid`, `Shape`, `Transform`等),则应在PROTO文件顶部通过`import`语句显式引入这些节点: ```proto # SubWheelMesh.proto import "webots://projects/objects/shape/protos/Box.proto" ``` #### 3. 检查父级PROTO文件是否正确引用子级PROTO 如果`WheelMesh.proto`引用了`SubWheelMesh.proto`,则应确保引用方式正确无误。例如: ```proto # WheelMesh.proto PROTO WheelMesh [ field SFVec3f translation 0 0 0 field SFRotation rotation 0 0 1 0 ] { children [ SubWheelMesh { translation IS translation rotation IS rotation } ] } ``` #### 4. 使用Webots验证工具检查PROTO文件 Webots提供了一个命令行工具`webots.proto`用于验证PROTO文件的语法和结构。可以通过以下命令进行验证: ```bash webots.proto SubWheelMesh.proto ``` 该命令将输出任何语法错误或结构问题,帮助快速定位问题所在。 #### 5. 清理并重建项目缓存 有时,Webots可能会缓存旧的PROTO定义,导致新修改未生效。尝试删除`_build`目录并重新启动Webots以清除缓存。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值