想了解在Vert.xVert.x垂直的方式
如果我們(在我的情況三)構建多,我們應該採取的辦法的API我們應該爲每個API運行單獨的垂直即有一個主Verticle和三個Verticle。主verticle發送消息給每個verticle和verticle需要制定消息的關懷和發回
OR
有一個verticle,只是將其路由與方法調用分離方法
請建議我們如何應該決定方法。
想了解在Vert.xVert.x垂直的方式
如果我們(在我的情況三)構建多,我們應該採取的辦法的API我們應該爲每個API運行單獨的垂直即有一個主Verticle和三個Verticle。主verticle發送消息給每個verticle和verticle需要制定消息的關懷和發回
OR
有一個verticle,只是將其路由與方法調用分離方法
請建議我們如何應該決定方法。
您的第一個選項並不好,因爲通常您不需要主虛擬機內的負載平衡主虛擬機。閱讀Scaling - sharing TCP servers部分。
您可以在一個Verticle或每個Verticle的一個API中運行所有API。第一個選項可以輕鬆擴展到1個虛擬機(上面的URL)中,但第二個選項對於跨多個服務器和開發的可擴展性更靈活,但它需要負載平衡器(可以使用nginx或HAProxy)。
我同意@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;
}
}
最後,註冊子模塊Routers
基礎Router
上。
Router router = Router.router(vertx)
router.mountSubRouter("/", ProductsRouterProvider.create(vertx))
router.mountSubRouter("/", InventoryRouterProvider.create(vertx))
router.mountSubRouter("/", OrdersRouterProvider.create(vertx))