提交 ccbfb6e6 编写于 作者: J Jason Song

fix docs issues

上级 1b973f45
![logo](https://raw.githubusercontent.com/ctripcorp/apollo/master/doc/images/logo/logo.png)
# Apollo
<img src="https://raw.githubusercontent.com/ctripcorp/apollo/master/doc/images/logo/logo-simple.png" alt="apollo-logo" width="30%">
> A reliable configuration management system
- Multiple environment, cluster, namespace
- Hot change
- Version control
- Gray publish
- Multiple environments and clusters support
- Configuration changes take effect in real time
- Versioned and grayscale releases management
- Great authentication, authorization and audit control
[GitHub](https://github.com/ctripcorp/apollo/)
[快速开始](zh/deployment/quick-start.md)
[Quick Start](en/quick-start.md)
[快速开始](zh/deployment/quick-start.md)
\ No newline at end of file
......@@ -34,8 +34,8 @@
loadSidebar: true,
loadNavbar: true,
mergeNavbar: true,
maxLevel: 4,
subMaxLevel: 3,
maxLevel: 6,
subMaxLevel: 5,
name: 'Apollo',
repo: 'https://github.com/ctripcorp/apollo/',
search: {
......
......@@ -71,7 +71,7 @@ Java客户端不依赖任何框架,能够运行于所有Java运行时环境,
5. [Apollo开放平台接入指南](zh/usage/apollo-open-api-platform)
6. [Apollo使用场景和示例代码](https://github.com/ctripcorp/apollo-use-cases)
7. [Apollo实践案例](zh/usage/apollo-user-practices)
8. [Apollo安全相关最佳实践](zh/usage/apollo-user-guide?id=_71-安全相关)
8. [Apollo安全相关最佳实践](zh/usage/apollo-user-guide?id=_71-%e5%ae%89%e5%85%a8%e7%9b%b8%e5%85%b3)
# Design
- [Apollo配置中心设计](zh/design/apollo-design.md)
......@@ -91,7 +91,6 @@ Java客户端不依赖任何框架,能够运行于所有Java运行时环境,
- [Quick Start](zh/deployment/quick-start.md)
- [Docker方式部署Quick Start](zh/deployment/quick-start-docker.md)
- [分布式部署指南](zh/deployment/distributed-deployment-guide.md)
- [Apollo源码解析(全)](http://www.iocoder.cn/categories/Apollo/)
# Release Notes
* [版本发布历史](https://github.com/ctripcorp/apollo/releases)
......
- [HOME](zh/README.md)
- 设计
- [**首页**](zh/README.md)
- 设计文档
- [Apollo配置中心设计](zh/design/apollo-design.md)
- [Apollo配置中心介绍](zh/design/apollo-introduction.md)
- [Apollo核心概念之“Namespace”](zh/design/apollo-core-concept-namespace.md)
- [Apollo源码解析(全)](http://www.iocoder.cn/categories/Apollo/)
- 部署
- 部署文档
- [Quick Start](zh/deployment/quick-start.md)
- [Docker方式部署Quick Start](zh/deployment/quick-start-docker.md)
- [分布式部署指南](zh/deployment/distributed-deployment-guide.md)
- 开发
- 开发文档
- [Apollo开发指南](zh/development/apollo-development-guide.md)
- Code Styles
- [Eclipse Code Style](https://github.com/ctripcorp/apollo/blob/master/apollo-buildtools/style/eclipse-java-google-style.xml)
......@@ -20,22 +19,21 @@
- [Portal实现用户登录功能](zh/development/portal-how-to-implement-user-login-function.md)
- [邮件模板样例](zh/development/email-template-samples.md)
* 系统使用
* [Apollo使用指南](zh/usage/apollo-user-guide.md)
* [Java客户端使用指南](zh/usage/java-sdk-user-guide.md)
* [.Net客户端使用指南](zh/usage/dotnet-sdk-user-guide.md)
* [Go、Python、NodeJS、PHP等客户端使用指南](zh/usage/third-party-sdks-user-guide.md)
* [其它语言客户端接入指南](zh/usage/other-language-client-user-guide.md)
* [Apollo开放平台接入指南](zh/usage/apollo-open-api-platform.md)
* [Apollo使用场景和示例代码](https://github.com/ctripcorp/apollo-use-cases)
* [Apollo实践案例](zh/usage/apollo-user-practices.md)
* [Apollo安全相关最佳实践](zh/usage/apollo-user-guide?id=_71-安全相关)
* FAQ
* [常见问题回答](zh/faq/faq.md)
* [部署&开发遇到的常见问题](zh/faq/common-issues-in-deployment-and-development-phase.md)
* 其它
* [Apollo性能测试报告](zh/misc/apollo-benchmark.md)
- [Releases](https://github.com/ctripcorp/apollo/releases)
\ No newline at end of file
- 系统使用文档
- [Apollo使用指南](zh/usage/apollo-user-guide.md)
- [Java客户端使用指南](zh/usage/java-sdk-user-guide.md)
- [.Net客户端使用指南](zh/usage/dotnet-sdk-user-guide.md)
- [Go、Python、NodeJS、PHP等客户端使用指南](zh/usage/third-party-sdks-user-guide.md)
- [其它语言客户端接入指南](zh/usage/other-language-client-user-guide.md)
- [Apollo开放平台接入指南](zh/usage/apollo-open-api-platform.md)
- [Apollo使用场景和示例代码](https://github.com/ctripcorp/apollo-use-cases)
- [Apollo实践案例](zh/usage/apollo-user-practices.md)
- [Apollo安全相关最佳实践](zh/usage/apollo-user-guide?id=_71-%e5%ae%89%e5%85%a8%e7%9b%b8%e5%85%b3)
- FAQ
- [常见问题回答](zh/faq/faq.md)
- [部署&开发遇到的常见问题](zh/faq/common-issues-in-deployment-and-development-phase.md)
- 其它
- [版本历史](https://github.com/ctripcorp/apollo/releases)
- [Apollo性能测试报告](zh/misc/apollo-benchmark.md)
\ No newline at end of file
......@@ -2,15 +2,16 @@
> 如果只是需要在本地快速部署试用Apollo的话,可以参考[Quick Start](zh/deployment/quick-start)
# &nbsp;
# 一、准备工作
## 1.1 运行时环境
## 1.1.1 OS
### 1.1.1 OS
服务端基于Spring Boot,启动脚本理论上支持所有Linux发行版,建议[CentOS 7](https://www.centos.org/)
## 1.1.2 Java
### 1.1.2 Java
* Apollo服务端:1.8+
* Apollo客户端:1.7+
......@@ -67,7 +68,7 @@ Apollo目前支持以下环境:
* PRO
* 生产环境
> 如果希望添加自定义的环境名称,具体步骤可以参考[部署&开发遇到的常见问题#42-添加自定义的环境](zh/faq/common-issues-in-deployment-and-development-phase?id=_4-portal如何增加环境?)
> 如果希望添加自定义的环境名称,具体步骤可以参考[Portal如何增加环境](zh/faq/common-issues-in-deployment-and-development-phase?id=_4-portal如何增加环境?)
以ctrip为例,我们的部署策略如下:
![Deployment](https://raw.githubusercontent.com/ctripcorp/apollo/master/doc/images/apollo-deployment.png)
......@@ -208,7 +209,7 @@ select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDB`.`ServerConfig` limi
> 注:ApolloConfigDB需要在每个环境部署一套,如fat、uat和pro分别部署3套ApolloConfigDB
#### 2.1.2.1 从别的环境导入ApolloConfigDB的项目数据
#### 2.1.2.4 从别的环境导入ApolloConfigDB的项目数据
如果是全新部署的Apollo配置中心,请忽略此步。
如果不是全新部署的Apollo配置中心,比如已经使用了一段时间,这时在Apollo配置中心已经创建了不少项目以及namespace等,那么在新环境中的ApolloConfigDB中需要从其它正常运行的环境中导入必要的项目数据。
......@@ -249,11 +250,11 @@ DEV,FAT,UAT,PRO
修改完需要重启生效。
>注1:一套Portal可以管理多个环境,但是每个环境都需要独立部署一套Config Service、Admin Service和ApolloConfigDB,具体请参考:[2.1.2 创建ApolloConfigDB](#_212-创建apolloconfigdb),[2.1.3.2 调整ApolloConfigDB配置](#_2132-调整apolloconfigdb配置),[2.2.1.1.2 配置数据库连接信息](#_22112-配置数据库连接信息),另外如果是为已经运行了一段时间的Apollo配置中心增加环境,别忘了参考[2.1.2.1 从别的环境导入ApolloConfigDB的项目数据](#_2121-从别的环境导入apolloconfigdb的项目数据)对新的环境做初始化。
>注1:一套Portal可以管理多个环境,但是每个环境都需要独立部署一套Config Service、Admin Service和ApolloConfigDB,具体请参考:[2.1.2 创建ApolloConfigDB](#_212-创建apolloconfigdb),[2.1.3.2 调整ApolloConfigDB配置](#_2132-调整apolloconfigdb配置),[2.2.1.1.2 配置数据库连接信息](#_22112-配置数据库连接信息),另外如果是为已经运行了一段时间的Apollo配置中心增加环境,别忘了参考[2.1.2.4 从别的环境导入ApolloConfigDB的项目数据](#_2124-从别的环境导入apolloconfigdb的项目数据)对新的环境做初始化。
>注2:只在数据库添加环境是不起作用的,还需要为apollo-portal添加新增环境对应的meta server地址,具体参考:[2.2.1.1.2.4 配置apollo-portal的meta service信息](#221124-%E9%85%8D%E7%BD%AEapollo-portal%E7%9A%84meta-service%E4%BF%A1%E6%81%AF)。apollo-client在新的环境下使用时也需要做好相应的配置,具体参考:[1.2.2 Apollo Meta Server](zh/usage/java-sdk-user-guide#_122-apollo-meta-server)。
>注2:只在数据库添加环境是不起作用的,还需要为apollo-portal添加新增环境对应的meta server地址,具体参考:[2.2.1.1.2.4 配置apollo-portal的meta service信息](#_221124-配置apollo-portal的meta-service信息)。apollo-client在新的环境下使用时也需要做好相应的配置,具体参考:[1.2.2 Apollo Meta Server](zh/usage/java-sdk-user-guide#_122-apollo-meta-server)。
>注3:如果希望添加自定义的环境名称,具体步骤可以参考[Portal如何增加环境](zh/%E9%83%A8%E7%BD%B2&%E5%BC%80%E5%8F%91%E9%81%87%E5%88%B0%E7%9A%84%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98#4-portal%E5%A6%82%E4%BD%95%E5%A2%9E%E5%8A%A0%E7%8E%AF%E5%A2%83)。
>注3:如果希望添加自定义的环境名称,具体步骤可以参考[Portal如何增加环境](zh/faq/common-issues-in-deployment-and-development-phase?id=_4-portal如何增加环境?)。
>注4:1.1.0版本增加了系统信息页面(`管理员工具` -> `系统信息`),可以通过该页面检查配置是否正确
......@@ -730,9 +731,7 @@ docker run -p 8070:8070 \
* APOLLO_PORTAL_ENVS(可选): 对应ApolloPortalDB中的[apollo.portal.envs](#_1-apolloportalenvs-可支持的环境列表)配置项,如果没有在数据库中配置的话,可以通过此环境参数配置
* DEV_META/PRO_META(可选): 配置对应环境的Meta Service地址,以${ENV}_META命名,需要注意的是如果配置了ApolloPortalDB中的[apollo.portal.meta.servers](#_2-apolloportalmetaservers-各环境meta-service列表)配置,则以apollo.portal.meta.servers中的配置为准
### 2.3.2
> 1.7.0之前的版本
### 2.3.2 1.7.0之前的版本
Apollo项目已经自带了Docker file,可以参照[2.2.1 获取安装包](#_221-获取安装包)配置好安装包后通过下面的文件来打Docker镜像:
......@@ -792,7 +791,7 @@ Get meta service url for current release by running these commands:
echo http://apollo-service-dev-apollo-configservice:8080
```
> 更多配置项说明可以参考[2.4.1.3.3 配置项说明](#_24143-配置项说明)
> 更多配置项说明可以参考[2.4.1.3.3 配置项说明](#_24133-配置项说明)
##### 2.4.1.3.2 卸载apollo-configservice和apollo-adminservice
......
......@@ -6,6 +6,7 @@
> 注:Quick Start需要有bash环境,Windows用户请安装[Git Bash](https://git-for-windows.github.io/),建议使用最新版本,老版本可能会遇到未知问题。也可以直接通过IDE环境启动,详见[Apollo开发指南](zh/development/apollo-development-guide)。
# &nbsp;
# 一、准备工作
## 1.1 Java
......
......@@ -151,7 +151,7 @@ k2 = v2
publicConfig.getProperty("k6", null); // k6 = v6
publicConfig.getProperty("k7", null); // k7 = v7
```
#### 5.4.4 ChangeListener
##### 5.4.4 ChangeListener
以上代码例子中可以看到,在客户端Namespace映射成一个Config对象。Namespace配置变更的监听器是注册在Config对象上。
......
# &nbsp;
# 一、总体设计
## 1.1 基础模型
......@@ -140,7 +141,7 @@
3. Admin Service发布配置后,发送ReleaseMessage给各个Config Service
4. Config Service收到ReleaseMessage后,通知对应的客户端
## 2.1.1 发送ReleaseMessage的实现方式
### 2.1.1 发送ReleaseMessage的实现方式
Admin Service在配置发布后,需要通知所有的Config Service有配置发布,从而Config Service可以通知对应的客户端来拉取最新的配置。
......
# &nbsp;
# 1、What is Apollo
## 1.1 背景
......@@ -230,7 +231,7 @@ public class SomeBean {
### 4.2.2 在Cluster中添加配置并发布
集群添加成功后,就可以为该集群添加配置了,首先需要按照下图所示切换到SHAJQ集群,之后配置添加流程和[3.2添加/修改配置项](#32-%E6%B7%BB%E5%8A%A0%E4%BF%AE%E6%94%B9%E9%85%8D%E7%BD%AE%E9%A1%B9)一样,这里就不再赘述了。
集群添加成功后,就可以为该集群添加配置了,首先需要按照下图所示切换到SHAJQ集群,之后配置添加流程和[3.3 添加/修改配置项](#_33-添加修改配置项)一样,这里就不再赘述了。
![cluster-created](https://raw.githubusercontent.com/ctripcorp/apollo/master/doc/images/cluster-created.png)
......
本文档介绍了如何在本地使用IDE编译、运行Apollo,从而可以帮助大家了解Apollo的内在运行机制,同时也为自定义开发做好准备。
# &nbsp;
# 一、准备工作
## 1.1 本地运行时环境
Apollo本地开发需要以下组件:
......
......@@ -72,7 +72,7 @@ eureka:
>注1:一套Portal可以管理多个环境,但是每个环境都需要独立部署一套Config Service、Admin Service和ApolloConfigDB,具体请参考:[2.1.2 创建ApolloConfigDB](zh/deployment/distributed-deployment-guide?id=_212-创建apolloconfigdb),[2.1.3.2 调整ApolloConfigDB配置](zh/deployment/distributed-deployment-guide?id=_2132-调整apolloconfigdb配置),[2.2.1.1.2 配置数据库连接信息](zh/deployment/distributed-deployment-guide?id=_22112-配置数据库连接信息)
> 注2:如果是为已经运行了一段时间的Apollo配置中心增加环境,别忘了参考[2.1.2.1 从别的环境导入ApolloConfigDB的项目数据](zh/deployment/distributed-deployment-guide?id=_2121-从别的环境导入apolloconfigdb的项目数据)对新的环境做初始化
> 注2:如果是为已经运行了一段时间的Apollo配置中心增加环境,别忘了参考[2.1.2.4 从别的环境导入ApolloConfigDB的项目数据](zh/deployment/distributed-deployment-guide?id=_2124-从别的环境导入apolloconfigdb的项目数据)对新的环境做初始化
#### 4.2 1.5.1及之前的版本
##### 4.2.1 添加Apollo预先定义好的环境
......@@ -83,7 +83,7 @@ eureka:
>注1:一套Portal可以管理多个环境,但是每个环境都需要独立部署一套Config Service、Admin Service和ApolloConfigDB,具体请参考:[2.1.2 创建ApolloConfigDB](zh/deployment/distributed-deployment-guide?id=_212-创建apolloconfigdb),[2.1.3.2 调整ApolloConfigDB配置](zh/deployment/distributed-deployment-guide?id=_2132-调整apolloconfigdb配置),[2.2.1.1.2 配置数据库连接信息](zh/deployment/distributed-deployment-guide?id=_22112-配置数据库连接信息)
> 注2:如果是为已经运行了一段时间的Apollo配置中心增加环境,别忘了参考[2.1.2.1 从别的环境导入ApolloConfigDB的项目数据](zh/deployment/distributed-deployment-guide?id=_2121-从别的环境导入apolloconfigdb的项目数据)对新的环境做初始化
> 注2:如果是为已经运行了一段时间的Apollo配置中心增加环境,别忘了参考[2.1.2.4 从别的环境导入ApolloConfigDB的项目数据](zh/deployment/distributed-deployment-guide?id=_2124-从别的环境导入apolloconfigdb的项目数据)对新的环境做初始化
##### 4.2.2 添加自定义的环境
......@@ -139,7 +139,7 @@ public class LegacyMetaServerProvider {
>注1:一套Portal可以管理多个环境,但是每个环境都需要独立部署一套Config Service、Admin Service和ApolloConfigDB,具体请参考:[2.1.2 创建ApolloConfigDB](zh/deployment/distributed-deployment-guide?id=_212-创建apolloconfigdb),[2.1.3.2 调整ApolloConfigDB配置](zh/deployment/distributed-deployment-guide?id=_2132-调整apolloconfigdb配置),[2.2.1.1.2 配置数据库连接信息](zh/deployment/distributed-deployment-guide?id=_22112-配置数据库连接信息)
> 注2:如果是为已经运行了一段时间的Apollo配置中心增加环境,别忘了参考[2.1.2.1 从别的环境导入ApolloConfigDB的项目数据](zh/deployment/distributed-deployment-guide?id=_2121-从别的环境导入apolloconfigdb的项目数据)对新的环境做初始化
> 注2:如果是为已经运行了一段时间的Apollo配置中心增加环境,别忘了参考[2.1.2.4 从别的环境导入ApolloConfigDB的项目数据](zh/deployment/distributed-deployment-guide?id=_2124-从别的环境导入apolloconfigdb的项目数据)对新的环境做初始化
### 5. 如何删除应用、集群、Namespace?
......@@ -225,7 +225,7 @@ http://1.1.1.1:8761/eureka/,http://2.2.2.2:8761/eureka/
### 9. Spring Boot中使用`ConditionalOnProperty`读取不到配置
`@ConditionalOnProperty`功能从0.10.0版本开始支持,具体可以参考 [3.2.1.3 在Spring Boot初始bootstrap阶段注入配置](zh/usage/java-sdk-user-guide?id=_322-spring-placeholder的使用)
`@ConditionalOnProperty`功能从0.10.0版本开始支持,具体可以参考 [Spring Boot集成方式](zh/usage/java-sdk-user-guide?id=_3213-spring-boot集成方式(推荐))
### 10. 多机房如何实现A机房的客户端就近读取A机房的config service,B机房的客户端就近读取B机房的config service?
......
......@@ -35,7 +35,7 @@ Apollo管理员在 http://{portal_address}/open/manage.html 创建第三方应
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-openapi</artifactId>
<version>1.1.0</version>
<version>1.7.0</version>
</dependency>
```
......@@ -159,7 +159,7 @@ appIds | false | String | appId列表,以逗号分隔,如果为空则返回
}
```
#### 3.2.4 创建集群接口
##### 3.2.4 创建集群接口
可以通过此接口创建集群,调用此接口需要授予第三方APP对目标APP的管理权限。
* **URL** : http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters
......@@ -284,7 +284,7 @@ dataChangeCreatedBy | true | String | namespace的创建人,格式为域账号
"dataChangeLastModifiedTime": "2016-07-20T14:05:58.000+0800"
}
```
#### 3.2.7 创建Namespace
##### 3.2.7 创建Namespace
可以通过此接口创建Namespace,调用此接口需要授予第三方APP对目标APP的管理权限。
* **URL** : http://{portal_address}/openapi/v1/apps/{appId}/appnamespaces
......@@ -454,7 +454,7 @@ operator | true | String | 删除配置的操作者,域账号
* **返回值** : 无
##### 3.2.11 发布配置接口
##### 3.2.13 发布配置接口
* **URL** : http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/releases
* **Method** : POST
......@@ -496,7 +496,7 @@ releasedBy | true | String | 发布人,域账号,注意:如果`ApolloConfi
}
```
##### 3.2.12 获取某个Namespace当前生效的已发布配置接口
##### 3.2.14 获取某个Namespace当前生效的已发布配置接口
* **URL** : http://{portal_address}/openapi/v1/envs/{env}/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/releases/latest
* **Method** : GET
......@@ -520,7 +520,7 @@ releasedBy | true | String | 发布人,域账号,注意:如果`ApolloConfi
}
```
##### 3.2.13 回滚已发布配置接口
##### 3.2.15 回滚已发布配置接口
* **URL** : http://{portal_address}/openapi/v1/envs/{env}/releases/{releaseId}/rollback
* **Method** : PUT
......@@ -542,11 +542,11 @@ operator | true | String | 删除配置的操作者,域账号
接口传入的token非法或者已过期,客户端需要检查token是否传入正确。
#### 4.3 403 - Forbidden
接口要访问的资源未得到授权,比如只授权了对A应用下Namespace的管理权限,但是却尝试管理B应用下的配置。
#### 4.3 404 - Not Found
#### 4.4 404 - Not Found
接口要访问的资源不存在,一般是URL或URL的参数错误。
#### 4.4 405 - Method Not Allowed
#### 4.5 405 - Method Not Allowed
接口访问的Method不正确,比如应该使用POST的接口使用了GET访问等,客户端需要检查接口访问方式是否正确。
#### 4.4 500 - Internal Server Error
#### 4.6 500 - Internal Server Error
其它类型的错误默认都会返回500,对这类错误如果应用无法根据提示信息找到原因的话,可以找Apollo研发团队一起排查问题。
# &nbsp;
# 名词解释
* 普通应用
* 普通应用指的是独立运行的程序,如
......@@ -137,8 +138,8 @@ Apollo中的回滚也是类似的机制,点击回滚后是将发布到客户
所以,首先执行普通应用接入文档中的以下几个步骤,然后再按照本章节后面的步骤操作。
1. [创建项目](#11-%E5%88%9B%E5%BB%BA%E9%A1%B9%E7%9B%AE)
2. [项目管理员权限](#121-%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86%E5%91%98%E6%9D%83%E9%99%90)
1. [创建项目](#_11-%E5%88%9B%E5%BB%BA%E9%A1%B9%E7%9B%AE)
2. [项目管理员权限](#_121-%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86%E5%91%98%E6%9D%83%E9%99%90)
### 2.2.1 创建Namespace
......@@ -183,8 +184,8 @@ Apollo中的回滚也是类似的机制,点击回滚后是将发布到客户
3. 点击提交
![public-namespace-item-created](https://raw.githubusercontent.com/ctripcorp/apollo/master/doc/images/public-namespace-item-created.png)
#### 2.2.2.3 通过文本模式编辑
这部分和普通应用一致,具体步骤请参见[1.3.2 通过文本模式编辑](#132-%E9%80%9A%E8%BF%87%E6%96%87%E6%9C%AC%E6%A8%A1%E5%BC%8F%E7%BC%96%E8%BE%91)
#### 2.2.2.2 通过文本模式编辑
这部分和普通应用一致,具体步骤请参见[1.3.2 通过文本模式编辑](#_132-%E9%80%9A%E8%BF%87%E6%96%87%E6%9C%AC%E6%A8%A1%E5%BC%8F%E7%BC%96%E8%BE%91)
### 2.2.3 发布配置
......@@ -289,7 +290,7 @@ Apollo目前提供Java客户端,具体信息请点击[Java客户端使用文
如果某个AppId需要覆盖公共的配置信息,那么在该AppId下关联公共的namespace并写入需要覆盖的配置即可。
具体步骤可以参考[公共组件接入指南](#%E4%BA%8C%E5%85%AC%E5%85%B1%E7%BB%84%E4%BB%B6%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97)
具体步骤可以参考[公共组件接入指南](#%e4%ba%8c%e3%80%81%e5%85%ac%e5%85%b1%e7%bb%84%e4%bb%b6%e6%8e%a5%e5%85%a5%e6%8c%87%e5%8d%97)
# 五、灰度发布使用指南
通过灰度发布功能,可以实现:
......@@ -460,5 +461,5 @@ Apollo 支持细粒度的权限控制,请务必根据实际情况做好权限
除了用户权限,在系统访问上也需要加以考虑:
1. `apollo-configservice``apollo-adminservice`是基于内网可信网络设计的,所以出于安全考虑,禁止`apollo-configservice``apollo-adminservice`直接暴露在公网
2. 对敏感配置可以考虑开启[访问秘钥](#62-%E9%85%8D%E7%BD%AE%E8%AE%BF%E9%97%AE%E7%A7%98%E9%92%A5),从而只有经过身份验证的客户端才能访问敏感配置
2. 对敏感配置可以考虑开启[访问秘钥](#_62-%e9%85%8d%e7%bd%ae%e8%ae%bf%e9%97%ae%e5%af%86%e9%92%a5),从而只有经过身份验证的客户端才能访问敏感配置
3. 1.7.1及以上版本可以考虑为`apollo-adminservice`开启[访问控制](zh/deployment/distributed-deployment-guide?id=_6-admin-serviceaccesscontrolenabled-配置apollo-adminservice是否开启访问控制),从而只有合法的`apollo-portal`才能访问对应接口,增强安全性
\ No newline at end of file
Apollo 配置中心的实践案例,供大家参考:
* [Apollo+ES源码改造,构建民生银行的ELK日志平台配置管理中心](https://mp.weixin.qq.com/s/VHugn0vgNu4m56V49geC4w)
* [Apollo在有赞的实践](https://mp.weixin.qq.com/s/Ge14UeY9Gm2Hrk--E47eJQ)
> 如您有案例希望分享,欢迎提交 Pull Request 至 [apollo-community](https://github.com/ctripcorp/apollo-community)
\ No newline at end of file
* [Apollo在有赞的实践](https://mp.weixin.qq.com/s/Ge14UeY9Gm2Hrk--E47eJQ)
\ No newline at end of file
>注意:本文档适用对象是Apollo系统的使用者,如果你是公司内Apollo系统的开发者/维护人员,建议先参考[Apollo开发指南](zh/Apollo%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97)。
>注意:本文档适用对象是Apollo系统的使用者,如果你是公司内Apollo系统的开发者/维护人员,建议先参考[Apollo开发指南](zh/development/apollo-development-guide)。
# &nbsp;
# 一、准备工作
## 1.1 环境要求
......@@ -222,5 +223,5 @@ appId就是应用的appId,如100004458。
}
```
### 5.3 修改配置
## 5.3 修改配置
在本地开发模式下,Apollo不会实时监测文件内容是否有变化,所以如果修改了配置,需要重启应用生效。
\ No newline at end of file
>注意:本文档适用对象是Apollo系统的使用者,如果你是公司内Apollo系统的开发者/维护人员,建议先参考[Apollo开发指南](zh/development/apollo-development-guide)。
# &nbsp;
# 一、准备工作
## 1.1 环境要求
......@@ -307,7 +308,7 @@ Apollo的客户端jar包已经上传到中央仓库,应用在实际使用时
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.1.0</version>
<version>1.7.0</version>
</dependency>
```
......@@ -847,7 +848,7 @@ Apollo客户端还支持本地开发模式,这个主要用于当开发环境
env=Local
```
更多配置环境的方式请参考[1.2.2 Environment](#122-environment)
更多配置环境的方式请参考[1.2.4.1 Environment](#_1241-environment)
## 5.2 准备本地配置文件
在本地开发模式下,Apollo客户端会从本地读取文件,所以我们需要事先准备好配置文件。
......@@ -879,7 +880,7 @@ request.timeout=2000
batch=2000
```
### 5.3 修改配置
## 5.3 修改配置
在本地开发模式下,Apollo不会实时监测文件内容是否有变化,所以如果修改了配置,需要重启应用生效。
# 六、测试模式
......@@ -891,7 +892,7 @@ batch=2000
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-mockserver</artifactId>
<version>1.1.0</version>
<version>1.7.0</version>
</dependency>
```
......
......@@ -11,7 +11,7 @@
该接口会从缓存中获取配置,适合频率较高的配置拉取请求,如简单的每30秒轮询一次配置。
由于缓存最多会有一秒的延时,所以如果需要配合配置推送通知实现实时更新配置的话,请参考[1.3 通过不带缓存的Http接口从Apollo读取配置](#13-%E9%80%9A%E8%BF%87%E4%B8%8D%E5%B8%A6%E7%BC%93%E5%AD%98%E7%9A%84http%E6%8E%A5%E5%8F%A3%E4%BB%8Eapollo%E8%AF%BB%E5%8F%96%E9%85%8D%E7%BD%AE)
由于缓存最多会有一秒的延时,所以如果需要配合配置推送通知实现实时更新配置的话,请参考[1.3 通过不带缓存的Http接口从Apollo读取配置](#_13-%E9%80%9A%E8%BF%87%E4%B8%8D%E5%B8%A6%E7%BC%93%E5%AD%98%E7%9A%84http%E6%8E%A5%E5%8F%A3%E4%BB%8Eapollo%E8%AF%BB%E5%8F%96%E9%85%8D%E7%BD%AE)
### 1.2.1 Http接口说明
**URL**: {config_server_url}/configfiles/json/{appId}/{clusterName}/{namespaceName}?ip={clientIp}
......@@ -115,7 +115,7 @@ Apollo提供了基于Http long polling的配置更新推送通知,第三方客
4. 如果传过来的notifications信息中发现有notificationId比服务端老,则直接返回对应namespace的最新notificationId, HttpStatus 200。
5. 客户端拿到服务端返回后,判断返回的HttpStatus
6. 如果返回的HttpStatus是304,说明配置没有变化,重新执行第1步
7. 如果返回的HttpStauts是200,说明配置有变化,针对变化的namespace重新去服务端拉取配置,参见[1.3 通过不带缓存的Http接口从Apollo读取配置](#13-%E9%80%9A%E8%BF%87%E4%B8%8D%E5%B8%A6%E7%BC%93%E5%AD%98%E7%9A%84http%E6%8E%A5%E5%8F%A3%E4%BB%8Eapollo%E8%AF%BB%E5%8F%96%E9%85%8D%E7%BD%AE)。同时更新notifications map中的notificationId。重新执行第1步。
7. 如果返回的HttpStauts是200,说明配置有变化,针对变化的namespace重新去服务端拉取配置,参见[1.3 通过不带缓存的Http接口从Apollo读取配置](#_13-%E9%80%9A%E8%BF%87%E4%B8%8D%E5%B8%A6%E7%BC%93%E5%AD%98%E7%9A%84http%E6%8E%A5%E5%8F%A3%E4%BB%8Eapollo%E8%AF%BB%E5%8F%96%E9%85%8D%E7%BD%AE)。同时更新notifications map中的notificationId。重新执行第1步。
### 1.4.2 Http接口说明
......@@ -161,7 +161,7 @@ Apollo从1.6.0版本开始增加访问密钥机制,从而只有经过身份验
| Header | Value | 备注 |
|---------------|------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Authorization | Apollo ${appId}:${signature} | appId: 应用的appId,signature:使用访问密钥对当前时间以及所访问的URL加签后的值,具体实现可以参考[Signature.signature](https://github.com/ctripcorp/apollo/blob/aa184a2e11d6e7e3f519d860d69f3cf30ccfcf9c/apollo-core/src/main/java/com/ctrip/framework/apollo/core/signature/Signature.java#L22) |
| Timestamp | 从1970-1-1 00:00:00 UTC+0 到现在所经过的毫秒数 | 可以参考[System.currentTimeMillis](https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#currentTimeMillis()) |
| Timestamp | 从`1970-1-1 00:00:00 UTC+0`到现在所经过的毫秒数 | 可以参考[System.currentTimeMillis](https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#currentTimeMillis()) |
## 1.6 错误码说明
正常情况下,接口返回的Http状态码是200,下面列举了Apollo会返回的非200错误码说明。
......@@ -172,11 +172,11 @@ Apollo从1.6.0版本开始增加访问密钥机制,从而只有经过身份验
### 1.6.2 401 - Unauthorized
客户端未授权,如服务端配置了访问密钥,客户端未配置或配置错误。
### 1.6.2 404 - Not Found
### 1.6.3 404 - Not Found
接口要访问的资源不存在,一般是URL或URL的参数错误,或者是对应的namespace还没有发布过配置。
### 1.6.3 405 - Method Not Allowed
### 1.6.4 405 - Method Not Allowed
接口访问的Method不正确,比如应该使用GET的接口使用了POST访问等,客户端需要检查接口访问方式是否正确。
### 1.6.4 500 - Internal Server Error
### 1.6.5 500 - Internal Server Error
其它类型的错误默认都会返回500,对这类错误如果应用无法根据提示信息找到原因的话,可以尝试查看服务端日志来排查问题。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册