Bpazy / blog

我的博客,欢迎关注和讨论
https://github.com/Bpazy/blog/issues
MIT License
41 stars 2 forks source link

Apollo 接入准则 #281

Open Bpazy opened 1 year ago

Bpazy commented 1 year ago

结论

哪些配置应该上 Apollo

绝大部分配置都可以上 Apollo,如:

  1. 数据库连接、MQ 配置;

  2. 简单的开关,如关闭 MQ 流量,无需额外接入 XXLJOB;

  3. 灰度;

    哪些配置不应该上 Apollo

    应用名称 ( spring.application.name )。

    哪些配置应该支持自动更新?

    较常见的如某些门店 ID 在某些业务里需要特殊处理,如应用处理数据权限时,针对特定商家做了特殊处理,此时“特定商家”的 ID 可以支持自动更新。 默认情况下,@Value 注入的配置,会自动更新。

    哪些配置不应该支持自动更新?

  4. 应用启动时初始化的 Bean,如:RocketMQ,数据库连接。

  5. Bean 依赖关系很复杂的组件,如 RocketMQ;

默认情况下,@ConfigurationProperties 注入的配置,不会自动更新。

配置文件迁移到 Apollo 策略

按需迁移,无需一次全量上 Apollo。 配置仅保留一份,即:Apollo 中有值,则 application.properties 中需删除。

原因详解

为什么开关推荐用 Apollo?

Apollo 自带灰度上线功能,如生产 4 台实例,其中 1 个需要关闭 MQ 流量,此时可以将“关闭 MQ 流量”指令下发到指定机器。

为什么 RocketMQ 不应该支持自动更新?

RocketMQ 启动时:

  1. 利用 @ConfigurationProperties 注入了相当多的配置,需要额外引入 spring-cloud-context 依赖中的 RefreshScope 实现配置重新载入;
  2. 根据配置初始化了 ConsumerBean;
  3. 应用启动完毕时,启动 ConsumerBean;

这导致 RocketMQ 支持自动更新,需要先重载配置,再重载 ConsumerBean,再重启 ConsumerBean,涉及到相当多 Bean 的销毁与创建,开发成本高、测试成本高。

附件

  1. 官方文档 + 使用教程