config - Consul Watch 在每台服务器上触发,导致多次 HTTP 调用
问题描述
我有一个由 3 台服务器组成的 Consul 集群。我为 keyprefix 设置了一个监视配置文件(参考下面)。我将手表部署到我的每个服务器文件。
我将手表部署到每个服务器的配置文件夹中,这样如果领导者宕机,那么下一个领导者将拥有手表。
我面临的问题是,当键更改触发手表时,3 个服务器中的每一个都运行处理程序。因此对处理程序服务进行 3 次 POST 调用。
我怎样才能使它只调用一个处理程序事件?最好来自集群领导者。或者有没有办法只在特定服务器实例上启用手表?
我想到的另一种方法是创建一个脚本处理程序,并在脚本中检查它是否在领导者上运行。如果是这样,则手动创建一个 HTTP 调用。
{
"watches": [{
"type": "keyprefix",
"prefix": "port-list/",
"handler_type": "http",
"http_handler_config": {
"path": "http://XX.XX.XX.XX:XXXX/alert",
"method": "POST",
"header": {
"x-foo": ["bar", "baz"]
},
"timeout": "10s",
"tls_skip_verify": false
}
}
]
}
解决方案
我们想出的解决方案是拥有一个拥有手表的专用服务器。显然,这并不理想,因为如果该服务器出现故障,那么手表就会随之而来。
推荐阅读
- java - CompletableFuture 并行执行几个线程,串行执行几个线程
- javascript - 如何使 Darkmode Js 不粘?
- google-bigquery - 在 BigQuery 中正确使用 COALESCE()
- macos - 恢复购买与收据验证
- mysql - 在 MySQL 中合并 2 个表中的数据
- python - 如果自定义命令的任何步骤失败,则中止 cmake 配置
- python - 获取Python中特定节点的所有子节点
- kubernetes - 使用 MetalLB 公开 Kubernetes 集群
- react-native - React-native Realm 无法在 IOS 上构建
- flutter - 没有 appBar 的 Flutter 自定义 showSearch