2017-06-06 1 views
0

は、我々は複数の(私の場合は3)を構築する必要があれば、我々は従うべきアプローチを理解するために募集アプローチ3つの頂点があります。この方法で、別の方法をマスター垂直方向のそれぞれのverticleにメッセージを送信し、その垂直方向のメッセージを定式化するの世話をし、バックVert.xの業種はVert.x</p> <p>におけるAPIは、我々は、各APIのために実行している別のバーティカルを持っているべきである、すなわちマスターを持っている

を、それを送信したり、

単一のverticleを持って、ちょうどルートそれは

を呼び出して、どのように我々をお勧めしてくださいそのアプローチを決めるべきです。

答えて

1

第1のオプションはあまり良くありません。通常、VM内の負荷分散にはマスターバーティクルが必要ないためです。 Scaling - sharing TCP serversセクションをお読みください。

1つの頂点ですべてのAPIを実行したり、1つの頂点で1つのAPIを実行したりすることができます。 1番目のオプションは1つのVM(上記のURLを参照)内で拡張するのは簡単ですが、2番目のオプションは複数のサーバーと開発のスケーラビリティの方が柔軟ですが、ロードバランサ(nginxまたはHAProxyを使用できます)が必要です。

1

私は@berserkkに同意します。それを1つの頂点にとどめてください。そうしないと、同じポート上で複数のVertexを受信して​​複数のHTTPサーバーを作成できないため、APIの異なる部分を異なるポートで実行する必要があります。

ただし、APIを分割する良い方法は、vert.x Routersに基づいている可能性があります。あなたは、例えばRouterプロバイダを作成することができ、あなたが、APIサブモジュールは、これらのサブモジュールのすべてのために、この

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

のような構造をしていると仮定しましょう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)) 
関連する問題