Skip to content

如何操作配置中心

HaojunRen edited this page May 31, 2024 · 2 revisions

相关配置项

跟配置中心有关的有三项配置,如下

  • 网关和服务的蓝绿灰度发布规则策略配置
  • 网关动态路由规则策略配置
  • Sentinel规则策略配置

支持六大配置中心,如下

  • Nacos
  • Apollo
  • Consul
  • Etcd
  • Zookeeper
  • Redis

相关原则

操作配置中心需要设置Key和Value,基本原则,如下

  • Key为
    • Nacos、Redis、Zookeeper配置中心,Group为{group},DataId为{serviceId}-{规则类型}
    • Apollo、Consul、Etcd配置中心,Key的格式为{group}-{serviceId}-{规则类型}
    • {group}为注册中心元数据group值
  • Value为对应的配置格式

提醒:蓝绿发布等规则不需要加-{规则类型}

相关事项

经过严格测试发现,上面六个配置中心删除配置项后的事件触发存在差异

配置中心 删除配置项后的事件触发
Nacos 会触发事件,响应后回调值为null
Apollo 会触发事件,响应后回调值为null
Etcd 会触发事件,响应后回调值为null
Zookeeper 会触发事件,响应后回调值为null
Redis 会触发事件,响应后回调值为空字符串
Consul 不会触发事件

从配置中心的中间件角度来讲,并不是所有的配置中心都暴露出事件触发的类型。例如,您收到一个配置变动的事件推送,在某些配置中心的客户端上并不能区分这个事件是修改配置还是删除配置,但具体测试一些配置中心,我们还是依旧可以得到如下结论

① 对于Nacos、Apollo、Etcd、Zookeeper来说,不约而同的遵循一个规则,即删除配置项后,产生事件触发的响应回调值为null,这可以作为修改配置还是删除配置的依据

② 对于Redis、Consul来说,则不适用

  • Spring Redis的RedisMessageListenerContainer只能对配置内容改变做出事件响应,却不能对配置删除做出事件响应。通过在删除前模拟把配置内容设置成空字符串(null不行),才可以得到事件响应
  • Consul Client本身不具备事件监听机制,通过while + sleep方式,循环监听Consul Index(即每个配置都有自己的Consul Index)对应配置内容改变而模拟实现事件监听。该实现方式会导致删除某条配置会触发其它配置的事件响应

基于上述差异,为统一起见,避免踩上这些细节处理带来的坑(尤其是使用Redis、Consul),当您希望把配置清空的时候,最好不要删除该配置,推荐一个操作原则

① 如果是Xml格式,例如,网关和服务的蓝绿灰度发布规则策略,输入如下内容表示空规则策略

<?xml version="1.0" encoding="UTF-8"?>
<rule>
</rule>

② 如果是Json格式,例如,网关动态路由或者Sentinel规则策略配置,输入如下内容表示空规则策略

列表形式的规则策略

[]

实体形式的规则策略

{}

该操作原则也适用于如何自定义订阅框架事件




2017-2050 ©Nepxion Studio Apache License

           

Total visits

讲义篇

集成篇

概念篇

实践篇

功能篇

配置篇

扩展篇

测试篇

升级篇

贡献篇

Clone this wiki locally