VERTX单个网络电视连接到多个服务器集群以实现负载余额,并避免连接失败



我们使用以下方法使用Web客户端连接到服务器fts.server。

webClient.post(config.getInteger("fts.port"), config.getString("fts.server"), config.getString("fts.indexpath")).putHeader(HttpHeaders.Names.AUTHORIZATION, "Basic " + base64key).sendJsonObject(jreq, ar -> {
                    if (ar.succeeded()) {
            }
            else 
            { 
            }
} 

就我而言,我有fts.server1,fts.server2,fts.server3都提供相同的服务。我需要加载服务器之间的呼叫,如果其中任何一个偏离线路,请尝试其他服务器。

之类的东西
webClient.post(config.getInteger("fts.port"), (config.getString("fts.server1")) or config.getString("fts.server2")) or config.getString("fts.server3"))   , config.getString("fts.indexpath")).putHeader(HttpHeaders.Names.AUTHORIZATION, "Basic " + base64key).sendJsonObject(jreq, ar -> {
                    if (ar.succeeded()) {
            }
            else 
            { 
            }
}

我该怎么做?

首先,有负载量,特别是为此。

,但是到了手头。与其拥有一个客户并试图为其加载,而是创建n个客户端和他们之间的负载。

使用java9:

var list = List.of(WebClient.create(vertx, new WebClientOptions().setDefaultHost("fts1")),
                WebClient.create(vertx, new WebClientOptions().setDefaultHost("fts2")),
                WebClient.create(vertx, new WebClientOptions().setDefaultHost("fts3")));

现在由您决定如何在它们之间加载。

随机?

Random r = new Random();
WebClient c = list.get(r.nextInt(list.size()));

round robin?

AtomicInteger count = new AtomicInteger();
WebClient c = list.get(count.getAndIncrement() % list.size());

这取决于您。

最新更新