我们使用以下方法使用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());
这取决于您。