Open Bpazy opened 1 year ago
绝大部分配置都可以上 Apollo,如:
数据库连接、MQ 配置;
简单的开关,如关闭 MQ 流量,无需额外接入 XXLJOB;
灰度;
应用名称 ( spring.application.name )。
较常见的如某些门店 ID 在某些业务里需要特殊处理,如应用处理数据权限时,针对特定商家做了特殊处理,此时“特定商家”的 ID 可以支持自动更新。 默认情况下,@Value 注入的配置,会自动更新。
应用启动时初始化的 Bean,如:RocketMQ,数据库连接。
Bean 依赖关系很复杂的组件,如 RocketMQ;
默认情况下,@ConfigurationProperties 注入的配置,不会自动更新。
按需迁移,无需一次全量上 Apollo。 配置仅保留一份,即:Apollo 中有值,则 application.properties 中需删除。
Apollo 自带灰度上线功能,如生产 4 台实例,其中 1 个需要关闭 MQ 流量,此时可以将“关闭 MQ 流量”指令下发到指定机器。
RocketMQ 启动时:
这导致 RocketMQ 支持自动更新,需要先重载配置,再重载 ConsumerBean,再重启 ConsumerBean,涉及到相当多 Bean 的销毁与创建,开发成本高、测试成本高。
结论
哪些配置应该上 Apollo
绝大部分配置都可以上 Apollo,如:
数据库连接、MQ 配置;
简单的开关,如关闭 MQ 流量,无需额外接入 XXLJOB;
灰度;
哪些配置不应该上 Apollo
应用名称 ( spring.application.name )。
哪些配置应该支持自动更新?
较常见的如某些门店 ID 在某些业务里需要特殊处理,如应用处理数据权限时,针对特定商家做了特殊处理,此时“特定商家”的 ID 可以支持自动更新。 默认情况下,@Value 注入的配置,会自动更新。
哪些配置不应该支持自动更新?
应用启动时初始化的 Bean,如:RocketMQ,数据库连接。
Bean 依赖关系很复杂的组件,如 RocketMQ;
默认情况下,@ConfigurationProperties 注入的配置,不会自动更新。
配置文件迁移到 Apollo 策略
按需迁移,无需一次全量上 Apollo。 配置仅保留一份,即:Apollo 中有值,则 application.properties 中需删除。
原因详解
为什么开关推荐用 Apollo?
Apollo 自带灰度上线功能,如生产 4 台实例,其中 1 个需要关闭 MQ 流量,此时可以将“关闭 MQ 流量”指令下发到指定机器。
为什么 RocketMQ 不应该支持自动更新?
RocketMQ 启动时:
这导致 RocketMQ 支持自动更新,需要先重载配置,再重载 ConsumerBean,再重启 ConsumerBean,涉及到相当多 Bean 的销毁与创建,开发成本高、测试成本高。
附件