摘要: 原创出处 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 的实际使用场景,以及为了尽可能减少外部依赖,我们没有采用外部的消息中间件,而是通过数据库实现了一个简单的消息队列

实现方式如下:

  1. Admin Service 在配置发布后会往 ReleaseMessage 表插入一条消息记录,消息内容就是配置发布的 AppId+Cluster+Namespace ,参见 DatabaseMessageSender 。
  2. Config Service 有一个线程会每秒扫描一次 ReleaseMessage 表,看看是否有新的消息记录,参见 ReleaseMessageScanner 。
  3. Config Service 如果发现有新的消息记录,那么就会通知到所有的消息监听器(ReleaseMessageListener),如 NotificationControllerV2 ,消息监听器的注册过程参见 ConfigServiceAutoConfiguration 。
  4. NotificationControllerV2 得到配置发布的AppId+Cluster+Namespace 后,会通知对应的客户端。

示意图如下:

流程

本文分享第 1 + 2 + 3 步骤,在 apollo-biz 项目的 message 模块实现。©著作权归作者所有:来自51CTO博客作者mb5ff80520dfa04的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Apollo 源码解析 —— Config Service 通知配置变化
  2. 芋道 Spring Boot 消息队列 RocketMQ 入门
  3. 面试官再问我如何保证 RocketMQ 不丢失消息,这回我笑了!
  4. RocketMQ 源码分析 —— 定时消息与消息重试
  5. 消息中间件 RocketMQ 源码解析 —— 调试环境搭建
  6. 分布式消息队列 RocketMQ源码解析:事务消息
  7. 分布式消息队列 RocketMQ源码解析:Filtersrv
  8. 分布式消息队列 RocketMQ 源码分析 —— 定时消息与消息重试
  9. 分布式消息队列 RocketMQ 源码分析 —— 高可用

随机推荐

  1. 一个Java Application运行后,在系统中是作
  2. Java借助Runtime调用外部程序阻塞的代码
  3. 为泛型类的泛型方法的属性赋值 - Java
  4. Bootstrap3.0学习第二十二轮(JavaScript
  5. 堆排序(最大堆)
  6. 二维数组空指针异常
  7. java基础IO删除文件夹文件
  8. 泛型的通配符扩展
  9. 使用Java发出DNS请求并对响应进行计时
  10. java学习笔记1