在 Vert.x 中,Verticle 之间共享数据的最佳方式是什么?我最感兴趣的是低开销、直接、并发访问。当多个 verticle 需要访问的内容足够大而无法经济地以 json 形式发送时,事件系统似乎并不合适。
简单示例 - 考虑使用 Vert.x 的虚构邮政服务。假设它有两个垂直点:一个用于计算下一个要发送的包裹,另一个用于计算运送包裹的车辆在前一小时内消耗的燃料。
假设在任何给定时刻都有 1000 个包裹。可能有一个数据库返回这些数据,但随后它需要返回所有包,因为确定发送哪个包/消耗燃料的算法足够复杂并且由两个 verticle 执行。
到目前为止我发现了这些:
- Vert.x Equivalent to the Node.js Global object
- Clustering and Shared Data in Vert.x
- https://groups.google.com/forum/#!topic/vertx/fyVvWRzeqJU
一些建议是:
- 通过
vertx.getMap
使用JSON.stringify
/JSON.parse
。这对我来说看起来是相当大的开销,尤其是当内容经常更新时(例如包裹位置可以包含 GPS 坐标) - 使用 EHCache、Hazelcast 等,但这些大多会以“你可以尝试”的结论而消失,而没有详细信息
这里是否有我无法识别的规范 Vert.x 解决方案?我同意以不同的方式划分事物,拥有更多的 verticle、更低/更高的粒度等,如果这是可行的方法的话 - 也就是说,这更多的是关于 Vert.x 模型的架构问题。
我也有兴趣查看与上述相关的开源示例(如果有)。
最佳答案
node
应用程序的集群故事并不好,特别是如果您不想使用 Java。
由于听起来您想要对数据共享进行最低级别的控制,因此我建议使用传统的 Websocket 在 verticle 之间桥接事件总线。
关于caching - 在 Vert.x 中的 verticle 之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25296119/