Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

Apollo 的 ReleaseKey 到底标识什么?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

releaseKey 让客户端知道这次拿到的是哪一版内容。下次读取可以带上已知的 key。如果服务器选给该客户端的版本一样,就可以用 HTTP 304 省去正文传输。

讲清原理

服务端先按应用、集群、命名空间以及灰度条件选中当前内容。公共命名空间场景可能合并多个 release 的 key。这个值适合做相等比较,客户端无需按字面判断先后,也不会因为本机拿到新 key 就让其他实例同步切换。

例子与易错点

本地启动一个 Apollo 测试环境。创建 App ID 为 interviews058 的应用,并在默认集群发布 application。将 APOLLO_URL 设为 Config Service 入口。示例需要 Bash、curl 和 Python 3。

url="$APOLLO_URL/configs/interviews058/default/application"
release_key=$(curl -fsS "$url" | python3 -c 'import json,sys; print(json.load(sys.stdin)["releaseKey"])')
curl -sS -o /dev/null -w '%{http_code}\n' -G --data-urlencode "releaseKey=$release_key" "$url"

两次读取之间发布版本相同,最后输出 304。如果恰好在两次请求之间发布新版本,就可能得到 200。

延伸阅读 Apollo 的配置能做到多强的一致性? · Apollo 的实时通知是怎么实现的? · Apollo 客户端减少重复拉取有哪些办法?

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。