# Agollo客户端 ## 使用 启动示例: ```go package main import ( "git.ixiaochuan.cn/zeus/xczero_frame/component/agollo" "git.ixiaochuan.cn/zeus/xczero_frame/component/agollo/env/config" ) func main() { agollo.Start(&config.AppConfig{ AppID: "zuiyou", Cluster: "search-server", NamespaceName: "application", IP: "172.20.20.2:8080", }) } ``` *获取配置* 使用repository中的该方法,如 ```go package main import ( "git.ixiaochuan.cn/zeus/xczero_frame/component/agollo" ) func main() { agollo.GetStringValue("config_key", "default_value") agollo.GetBoolValue("config_key", true) agollo.GetIntValue("config_key", 111) agollo.GetFloatValue("config_key", 1.23) } ``` ## 结构 本客户端主要包含三个方面的内容更新,分别为server_ips、notifications和apolloConfigs。 其中server_ips为单独一个协程来更新,另外两个共用一个协程顺序按更新。 ### server_ips 服务刚启动时客户端会根据配置中的hostport来访问metaserver服务, 如果metaserver服务一直也没问题的话,那么server_ips不会被访问到。当且仅当访问metaserver出错的时候会访问server_ips, 也就是说,server_ips是一个降级措施。 ### notifications 和 apolloConfigs notifications用于长轮询,当服务端配置没有任何更新的时候,此处长轮询会阻塞住,根据服务端和客户端配置来设置阻塞时长。 客户端需设置超时时间大于服务端配置。当前客户端链接超时时间配置为10min,服务端设置为长轮询1min后返回结果。 首次访问马上返回相应的配置。再次访问,如果用户配置没有更新则notifications服务端返回HTTP状态码304,不进行更新。 在长轮询结束后,无论如何都进行一次用户配置的更新,防止出现用户配置没有被正确更新的情况。(线上出现过这种问题)