您认为 Vert.x 中的垂直设计指南是啥?
Posted
技术标签:
【中文标题】您认为 Vert.x 中的垂直设计指南是啥?【英文标题】:What do you consider as verticle design guideline in Vert.x?您认为 Vert.x 中的垂直设计指南是什么? 【发布时间】:2021-07-10 10:23:17 【问题描述】:虽然 Vert.x 的核心手册(和其他文档)展示了几个用例并对 Vert.x 给出了很好的总体解释,但我很好奇在设计 Verticle 类时应该做什么和不应该做什么。前言:我知道 Vert.x 的设计通常是反对给出严格的设计指南的。因此,无需在答案中提及这一点。 导致我提出这个问题的一个例子如下。我创建了一个名为 ServiceDiscoveryVerticle.java 的 Verticle,它具有以下职责:
读入服务配置文件,然后通过 Vert.x ServiceDiscovery 发布它们 在列表中额外管理服务(已发布/未发布)以跟踪未发布的服务 通过事件总线接收消息,用于发布或取消发布某个服务所有这些代码都体现在重写的 start 方法中。
所以我在这个问题中提出的核心问题是:
-
在设计 verticle 类时做什么和不做什么? (根据您的个人喜好/意见)
是否有任何关于什么属于 Verticle 和什么不属于的一般准则? (官方或社区)
是否推荐将启动方法拆分为私有方法(如果是,应该在同一个类中还是最好放在单独的类中,如 OwnServiceDiscovery.java)?
对我给定的示例有任何其他想法/评论(ServiceDiscoveryVerticle.java)?
【问题讨论】:
【参考方案1】:在这里可以做很多哲学,但我会尽量保持简单。
事实上,verticle 及其start()
是并且将是您初始化系统、挂载处理程序、触发加载配置和 co 等事情的主要方式。所以不要对自己太苛刻,这部分是正确的。
如果您使用 Web 服务 API 或服务代理,则会自动为您安装处理程序。这些处理程序的实际代码位于外部类中,您可以决定如何构建它们。
如果您自己安装处理程序,那么您可以使用大量内联代码,或者您可以决定将它们提取到类中。然而,在更大的应用程序中,您可能会尽可能多地拆分和提取代码。
我个人尽可能多地从 Verticle 中提取代码,并使其成为一个相当协调和设置的地方。另外,我的start()
方法(或者更确切地说是rxStart()
)是对其他方法的一堆调用,这些方法的名字让我对系统启动时发生的事情有一个概述,而不是有很多我看不懂的代码.但正如你所说,这些都是个人喜好。 Vert.x 并不意味着对您有任何影响!
【讨论】:
【参考方案2】:-
不要阻塞事件循环
不要从另一个verticle调用verticle,使用EventBus
如果您使用 executeBlocking,您可能做错了什么
如果您一直在部署/取消部署 Verticle,那么您可能做错了什么
不要使用 Verticle 共享状态
保持你的verticles小,但不要太小
【讨论】:
以上是关于您认为 Vert.x 中的垂直设计指南是啥?的主要内容,如果未能解决你的问题,请参考以下文章