2017-06-06 26 views
0

想了解在Vert.xVert.x垂直的方式

如果我們(在我的情況三)構建多,我們應該採取的辦法的API

我們應該爲每個API運行單獨的垂直即有一個主Verticle和三個Verticle。主verticle發送消息給每個verticle和verticle需要制定消息的關懷和發回

OR

有一個verticle,只是將其路由與方法調用分離方法

請建議我們如何應該決定方法。

回答

1

您的第一個選項並不好,因爲通常您不需要主虛擬機內的負載平衡主虛擬機。閱讀Scaling - sharing TCP servers部分。

您可以在一個Verticle或每個Verticle的一個API中運行所有API。第一個選項可以輕鬆擴展到1個虛擬機(上面的URL)中,但第二個選項對於跨多個服務器和開發的可擴展性更靈活,但它需要負載平衡器(可以使用nginx或HAProxy)。

1

我同意@berserkk。將它保存在一個Verticle中,否則API的不同部分將不得不在不同的端口上運行 - 因爲無法在偵聽同一端口的多個Verticle中創建多個HTTP服務器。

但是,分割您的API的好方法可能基於vert.x Routers。讓我們假設你已經API子模塊的結構是這樣

/products/... 
/inventory/... 
/orders/... 

對於每一個這些子模塊,你可以創建一個Router供應商,例如ProductsRouterProvider,InventoryRouterProviderOrdersRouterProvider

這些提供程序中的每一個都負責特定的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))