Apollo 源码解析 —— Admin Service 发送 ReleaseMessage
16lz
2021-01-22
摘要: 原创出处 http://www.iocoder.cn/Apollo/admin-server-send-release-message/ 「芋道源码」欢迎转载,保留摘要,谢谢!
- 1. 概述
- 2. ReleaseMessage
- 3. MessageSender
- 4. ReleaseMessageListener
- 666. 彩蛋
1. 概述
老艿艿:本系列假定胖友已经阅读过 《Apollo 官方 wiki 文档》 。
本文接 《Apollo 源码解析 —— Portal 发布配置》 一文,分享配置发布的第三步,Admin Service 发布配置后,发送 ReleaseMessage 给各个Config Service 。
FROM 《Apollo配置中心设计》 的 2.1.1 发送ReleaseMessage的实现方式
Admin Service 在配置发布后,需要通知所有的 Config Service 有配置发布,从而 Config Service 可以通知对应的客户端来拉取最新的配置。
从概念上来看,这是一个典型的消息使用场景,Admin Service 作为 producer 发出消息,各个Config Service 作为 consumer 消费消息。通过一个消息组件(Message Queue)就能很好的实现 Admin Service 和 Config Service 的解耦。
在实现上,考虑到 Apollo 的实际使用场景,以及为了尽可能减少外部依赖,我们没有采用外部的消息中间件,而是通过数据库实现了一个简单的消息队列。
实现方式如下:
- Admin Service 在配置发布后会往 ReleaseMessage 表插入一条消息记录,消息内容就是配置发布的 AppId+Cluster+Namespace ,参见 DatabaseMessageSender 。
- Config Service 有一个线程会每秒扫描一次 ReleaseMessage 表,看看是否有新的消息记录,参见 ReleaseMessageScanner 。
- Config Service 如果发现有新的消息记录,那么就会通知到所有的消息监听器(ReleaseMessageListener),如 NotificationControllerV2 ,消息监听器的注册过程参见 ConfigServiceAutoConfiguration 。
- NotificationControllerV2 得到配置发布的AppId+Cluster+Namespace 后,会通知对应的客户端。
示意图如下:
流程
本文分享第 1 + 2 + 3 步骤,在 apollo-biz
项目的 message
模块实现。©著作权归作者所有:来自51CTO博客作者mb5ff80520dfa04的原创作品,如需转载,请注明出处,否则将追究法律责任
更多相关文章
- Apollo 源码解析 —— Config Service 通知配置变化
- 芋道 Spring Boot 消息队列 RocketMQ 入门
- 面试官再问我如何保证 RocketMQ 不丢失消息,这回我笑了!
- RocketMQ 源码分析 —— 定时消息与消息重试
- 消息中间件 RocketMQ 源码解析 —— 调试环境搭建
- 分布式消息队列 RocketMQ源码解析:事务消息
- 分布式消息队列 RocketMQ源码解析:Filtersrv
- 分布式消息队列 RocketMQ 源码分析 —— 定时消息与消息重试
- 分布式消息队列 RocketMQ 源码分析 —— 高可用