精品专栏
- 《GitHub:中文详细注释的开源项目》
摘要: 原创出处 http://www.iocoder.cn/Apollo/portal-publish/ 「芋道源码」欢迎转载,保留摘要,谢谢!
- 1. 概述
- 2. 实体
- 2.1 Release
- 2.2 ReleaseHistory
- 2.3 ReleaseMessage
- 3. Portal 侧
- 3.1 ReleaseController
- 3.2 ReleaseService
- 3.3 ReleaseAPI
- 4. Admin Service 侧
- 4.1 ReleaseController
- 4.2 ReleaseService
- 4.3 ReleaseRepository
- 4.4 ReleaseHistoryService
- 4.5 ReleaseHistoryRepository
- 666. 彩蛋
1. 概述
老艿艿:本系列假定胖友已经阅读过 《Apollo 官方 wiki 文档》 。
从本文开始,我们进入 Apollo 最最最核心的流程 配置发布后的实时推送设计 。
在配置中心中,一个重要的功能就是配置发布后实时推送到客户端。下面我们简要看一下这块是怎么设计实现的。
配置发布
上图简要描述了配置发布的大致过程:
- 用户在 Portal 操作配置发布
- Portal 调用 Admin Service 的接口操作发布
- Admin Service 发布配置后,发送 ReleaseMessage 给各个Config Service
- Config Service 收到 ReleaseMessage 后,通知对应的客户端
本文分享 Portal 发布配置,对应上述第一、二步,大体流程如下:
流程
- 这个流程过程中,我们先不考虑灰度发布,会涉及配置合并的过程。
老艿艿:因为 Portal 是管理后台,所以从代码实现上,和业务系统非常相像。也因此,本文会略显啰嗦。
2. 实体
2.1 Release
com.ctrip.framework.apollo.biz.entity.Release ,继承 BaseEntity 抽象类,Release 实体。代码如下:
@Entity@Table(name = "Release")@SQLDelete(sql = "Update Release set isDeleted = 1 where id = ?") // 标记删除@Where(clause = "isDeleted = 0")public class Release extends BaseEntity { /** * Release Key * * 【TODO 6006】用途? */ @Column(name = "ReleaseKey