如果我们必须在Vert.x中构建多个(在我的例子中是三个)API,我想了解我们应该遵循的方法
我们是否应该为每个API运行单独的垂直,即有一个主垂直,每个垂直有三个。Master verticle向每个verticle发送消息,该verticle负责制定消息并发送回来
或
只需通过方法调用将其路由到不同的方法
请建议我们应该如何决定方法。
发布于 2017-06-07 06:38:31
你的第一个选择不是很好,因为通常你不需要master verticle来实现VM内部的负载平衡。阅读Scaling - sharing TCP servers部分。
您可以在一个verticle中运行所有API,也可以在一个verticle中运行一个API。第一个选项很容易在1个虚拟机内扩展(请阅读上面的网址),但第二个选项在跨多个服务器和开发的可扩展性方面更灵活,但它需要负载均衡器(您可以使用nginx或HAProxy)。
发布于 2017-06-07 14:36:40
我同意@berserkk。将其保持在一个verticle中,否则API的不同部分将不得不在不同的端口上运行-因为您不能在侦听同一端口的多个verticle中创建多个HTTP服务器。
然而,拆分API的一个好方法可能是基于vert.x Routers。让我们假设您有如下结构的API子模块
/products/...
/inventory/...
/orders/...对于这些子模块中的每一个,您都可以创建一个Router提供程序,例如ProductsRouterProvider、InventoryRouterProvider或OrdersRouterProvider。
这些提供程序中的每一个都负责特定的API模块-基本上是注册所需的路由。
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。
Router router = Router.router(vertx)
router.mountSubRouter("/", ProductsRouterProvider.create(vertx))
router.mountSubRouter("/", InventoryRouterProvider.create(vertx))
router.mountSubRouter("/", OrdersRouterProvider.create(vertx))https://stackoverflow.com/questions/44397636
复制相似问题