首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vert.x垂直方法

Vert.x垂直方法
EN

Stack Overflow用户
提问于 2017-06-07 02:47:27
回答 2查看 284关注 0票数 0

如果我们必须在Vert.x中构建多个(在我的例子中是三个)API,我想了解我们应该遵循的方法

我们是否应该为每个API运行单独的垂直,即有一个主垂直,每个垂直有三个。Master verticle向每个verticle发送消息,该verticle负责制定消息并发送回来

只需通过方法调用将其路由到不同的方法

请建议我们应该如何决定方法。

EN

回答 2

Stack Overflow用户

发布于 2017-06-07 06:38:31

你的第一个选择不是很好,因为通常你不需要master verticle来实现VM内部的负载平衡。阅读Scaling - sharing TCP servers部分。

您可以在一个verticle中运行所有API,也可以在一个verticle中运行一个API。第一个选项很容易在1个虚拟机内扩展(请阅读上面的网址),但第二个选项在跨多个服务器和开发的可扩展性方面更灵活,但它需要负载均衡器(您可以使用nginx或HAProxy)。

票数 1
EN

Stack Overflow用户

发布于 2017-06-07 14:36:40

我同意@berserkk。将其保持在一个verticle中,否则API的不同部分将不得不在不同的端口上运行-因为您不能在侦听同一端口的多个verticle中创建多个HTTP服务器。

然而,拆分API的一个好方法可能是基于vert.x Routers。让我们假设您有如下结构的API子模块

代码语言:javascript
复制
/products/...
/inventory/...
/orders/...

对于这些子模块中的每一个,您都可以创建一个Router提供程序,例如ProductsRouterProviderInventoryRouterProviderOrdersRouterProvider

这些提供程序中的每一个都负责特定的API模块-基本上是注册所需的路由。

代码语言:javascript
复制
class ProductsRouterProvider {
  static Router create(Vertx vertx) {
    Router router = Router.router(vertx)
    router.get("/").handler(new ListAllProductsHandler())
    router.get("/:productId").handler(new ProductDetailHandler())
    ...
    return router;
  }
}

最后,在基本Router上注册子模块Routers

代码语言:javascript
复制
Router router = Router.router(vertx)
router.mountSubRouter("/", ProductsRouterProvider.create(vertx))
router.mountSubRouter("/", InventoryRouterProvider.create(vertx))
router.mountSubRouter("/", OrdersRouterProvider.create(vertx))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44397636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档