离线版数据服务更新
目前该产品在做内部调整,不支持新购、续费、升级等操作,订单有效期内可继续正常使用,本文档仅供订单期内用户参考。请留意服务到期时间,做好备选方案,感谢您的支持理解。
升级指南
离线版因为可以脱离公网使用,仅有查询功能,所以离线库升级无法在离线sdk中继续完成,可通过API的方式获取离线库文件下载地址,通过与本地文件版本号对比选择合适时间下载并替换完成升级。
如果对数据精确度要求较高推荐经常更新离线库文件,阿里数据源一般24小时更新一次。授权文件通常因为购买的服务发生变配升级、续费而产生更新,强烈推荐发现新版授权文件后立即更新,确保服务升级续费在您本地生效。sdk更新频率较低,如果发现有升级也推荐更新(sdk更新可能要重启服务,建议在业务低峰期处理)。
1、手动升级
到阿里云控制台页面直接下载最新的离线库文件、sdk、授权文件配置离线文件路径重新启动服务或者替换实例进行升级
优点:方便、简单、快速使用服务
缺点:当前节点可能需要停止服务
2、自动升级(推荐)
通过API获取离线库文件、sdk、授权文件等下载地址,与本地版本号对比,自动下载文件、替换文件、更换实例或重启服务进行升级
优点:可升级集群,保持文件最新,可不停止服务进行升级
缺点:升级方案需要自行设置
以下三个API用于升级离线产品,演示代码默认使用SpringBoot(仅仅是为了方便显示json返回值)
(1)、通过DescribeGeoipInstances获取所有已购买的产品实例列表(instanceId即实例ID,也可手动获取)返回结果如下所示:
{
"productCode": "geoipv4offline",
"instanceId": "geoipv4offline_cn-*",
"versionCode": "version_standard",
"status": "OPEN",
"createTime": "2020-08-19T03:15Z",
"createTimestamp": 1597806917000,
"expireTime": "2022-02-22T16:00Z",
"expireTimestamp": 1645545600000,
"maxQps": 150000,
"maxQpd": null
}
(2)、通过 DescribeGeoipInstanceDataInfos 根据传入参数获取离线版实例数据信息,需要使用instanceId参数。
在从零开始接入阿里云IP地理位置库在线版项目com.example.service.GeoipService.java添加如下代码
//根据传入参数获取离线版实例数据信息
public DescribeGeoipInstanceDataInfosResponse DescribeGeoipInstanceDataInfos(String instanceId) {
DescribeGeoipInstanceDataInfosRequest request = new DescribeGeoipInstanceDataInfosRequest();
request.setInstanceId(instanceId);
DescribeGeoipInstanceDataInfosResponse response = null;
try {
response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
return response;
}
在从零开始接入阿里云IP地理位置库在线版项目com.example.controller.GeoipController.java添加如下代码
@GetMapping("/online/dataInfos/{instanceId}")
public DescribeGeoipInstanceDataInfosResponse dataInfos(@PathVariable String instanceId) {
return geoipService.DescribeGeoipInstanceDataInfos(instanceId);
}
在浏览器访问
http://127.0.0.1:8080/http/online/dataInfos/geoipv4offline_cn-*
{
"requestId": "BB2DB17C-EFA9-4ABF-8D57-02C02156CD0E",
"dataInfos": [
{
"type": "IPV4_DATA",
"version": "1.20210420122927",
"updateTime": "2021-04-20T04:45Z",
"updateTimestamp": 1618893902000,
"downloadCount": 0
},
{
"type": "LICENSE",
"version": "1.20210222123044",
"updateTime": "2021-02-22T04:30Z",
"updateTimestamp": 1613968246000,
"downloadCount": 202
},
{
"type": "JAVA_SDK",
"version": "1.20210113140642",
"updateTime": "2021-01-13T08:30Z",
"updateTimestamp": 1610526600000,
"downloadCount": 96
},
{
"type": "CPP_SDK",
"version": "1.20200908161000",
"updateTime": "2020-09-08T08:15Z",
"updateTimestamp": 1599552901000,
"downloadCount": 86
},
{
"type": "PYTHON_SDK",
"version": "1.20200903171000",
"updateTime": "2020-09-03T09:19Z",
"updateTimestamp": 1599124765000,
"downloadCount": 85
}
]
}
API返回了具体的sdk、授权文件、离线库等类型,根据类型继续调用API即可得到具体的文件下载地址
(3)、通过 DescribeGeoipInstanceDataUrl 根据传入参数获取离线版实例数据下载链接,需要使用instanceId、dataType(上个接口type字段)参数。
在从零开始接入阿里云IP地理位置库在线版项目com.example.service.GeoipService.java添加如下代码
//根据传入参数获取离线版实例数据下载链接
public DescribeGeoipInstanceDataUrlResponse DescribeGeoipInstanceDataUrl(String instanceId, String dataType) {
DescribeGeoipInstanceDataUrlRequest request = new DescribeGeoipInstanceDataUrlRequest();
request.setInstanceId(instanceId);
request.setDataType(dataType);
DescribeGeoipInstanceDataUrlResponse response = null;
try {
response = client.getAcsResponse(request);
//可以用 Getter方法拿到下载地址url或直接打印json
//System.out.println(response.getFixedDomainDownloadUrl());
System.out.println(new GsonBuilder().disableHtmlEscaping().create().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
return response;
}
在从零开始接入阿里云IP地理位置库在线版项目com.example.controller.GeoipController.java添加如下代码
@GetMapping("/online/dataUrl/{instanceId}/{dataType}")
public DescribeGeoipInstanceDataUrlResponse dataUrl(@PathVariable String instanceId, @PathVariable String dataType) {
System.out.println(instanceId);
System.out.println(dataType);
return geoipService.DescribeGeoipInstanceDataUrl(instanceId, dataType);
}
在浏览器访问
http://127.0.0.1:8080/http/online/dataUrl/geoipv4offline_cn-*/IPV4_DATA
结果如下所示:得到当前类型的下载地址,可通过代码下载到本地替换数据完成离线库更新,其中fixedDomainDownloadUrl返回值为固定域名,推荐优先使用此地址下载,若需要配置安全策略,可将file.geoip.alidns.com域名加白名单。
{
"fixedDomainDownloadUrl": "https://file.geoip.alidns.com/product/v1/ipv4/common/v1.20210420082401.dex?Expires=*",
"requestId": "65E15C91-7FC4-4B99-9C94-692E9DEFE9F2",
"downloadUrl": "http://geoip-sdk-user.oss-cn-zhangjiakou.aliyuncs.com/product/v1/ipv4/common/v1.20210420082401.dex?Expires=*"
}
http://127.0.0.1:8080/http/online/dataUrl/geoipv4offline_cn-*/LICENSE
http://127.0.0.1:8080/http/online/dataUrl/geoipv4offline_cn-*/JAVA_SDK
http://127.0.0.1:8080/http/online/dataUrl/geoipv4offline_cn-*/CPP_SDK
http://127.0.0.1:8080/http/online/dataUrl/geoipv4offline_cn-*/PYTHON_SDK
获取的链接地址具有时效性,超时后需要重新请求获得地址
升级说明
离线库文件升级后要重新启动实例或平滑重启服务,新的实例才会生效(数据在第一次实例化后就已经全部加载到内存中,后续直接从内存读取),以java为例:
如果下载离线文件或生成实例时有异常或错误,请捕获异常,此时不要替换或重启服务,否则影响原程序运行。
一、通过构造方法初始化后的实例重启
FastIPGeoClient fastIpGeoClient = new FastIPGeoClient(geoConf);
在自行下载升级离线数据后,需要配置新的实例,如:
FastIPGeoClient fastIpGeoClient2 = new FastIPGeoClient(geoConf2);
在自定义想替换的时机重新赋值,如:
fastIpGeoClient = fastIpGeoClient2;
二、通过静态方法(单例模式)初始化后的实例重启
因为是将加载字段、license文件路径、数据文件路径封装成一个实例,获取的实例不会重复创建。
FastIPGeoClient fastIpGeoClient = FastIPGeoClient.getSingleton(geoConf);
1、可以采用非单例方法来包装单例,然后在自定义想替换的时机重新实例化对象即可。
2、更改license或数据文件的路径,重新加载单例模式的实例。
- 本页导读