我们使用以下方法使用网络客户端连接到服务器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
{
}
}
我该怎么做?
答案 0 :(得分:0)
首先,有专门用于此目的的负载平衡器。
但是到现在为止。创建一个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()));
知更鸟吗?
AtomicInteger count = new AtomicInteger();
WebClient c = list.get(count.getAndIncrement() % list.size());
由您决定。