Apollo 的 ReleaseKey 到底标识什么?
查看完整题解
参考回答
直接回答
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 客户端减少重复拉取有哪些办法?
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。