java - vertx single webClient 连接到多个服务器集群以实现负载平衡并避免连接失败
问题描述
我们使用以下方法使用 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()));
循环赛?
AtomicInteger count = new AtomicInteger();
WebClient c = list.get(count.getAndIncrement() % list.size());
这取决于你。
推荐阅读
- winforms - 在 PowerShell 中为新表单分离任务栏图标
- javascript - 如何从单独的组件传入道具?
- excel - 基于多列多IF条件的TEXTJOIN
- javascript - 如何修复下拉列表以使隐藏的 div 之一出现并附加
- r - 如何对数据框中的每一行执行条件求和/均值
- sharepoint - 从初学者/中级水平学习 Sharepoint 2016 的最佳免费或付费视频培训系列
- bash - 使用多个查找正则表达式 sed awk 将 bash 脚本优化为构建报告的数组和函数
- objective-c - 有没有办法在检测到的图像上添加常规 ARAnchor?
- dart - 如何处理 http 错误 (FormatException: Unexpected end of input (at character 1))
- c - 为什么这个 c 代码会导致竞争条件?