我有一个
Vert.x
应用程序,具有多个 vertickl 来与不同的 buses 和 dbs(mongo、redis、rabbit、kafka 等)进行交互
其中有一个 verticle 专门用于与外部 api(非常旧)进行通信,它允许来自单个(预定义)源的一个持久连接
我正在使用相同的代码(自动缩放)部署 vertx 的多个实例,并使它们充当集群,使用
hazelcast
作为集群管理器
将
external-api verticle
的创建限制为仅单个实例的最佳实践是什么,我查看了:
SharedData.Lock()
- 但我需要用异步旋转锁逻辑来包装它High Availability
- 非常适合终止和自动缩放,但不会强制单个 verticle 的活动worker verticle
- 在每个实例中创建 1 个工作者垂直体我可以混合使用上述所有内容并创建所需的功能,但我似乎有些复杂......
我应该将我的 verticle 分离到不同的服务器还是有一些我还没有想到的更简单的解决方案?
您不需要单个 verticle ,让该 verticle 保持无状态并在代理服务中应用您的连接 - 在您可以将该服务注册为 HttpEndpoint 、 Evenbus 、 Message 或 JDBC 服务类型之后,您将拥有与数据库的单点通信或外部 http 源。