Closed fxleyu closed 6 years ago
新版配置中心(使用 ZooKeeper 实现)有一个不可思议的功能。
在不传递 id 以及版本信息的情况下,可以基于配置内容动态的获取配置值。更不可思议的是,配置中心的客户端实例是一个单例模式。
昨天上线,今天终于有时间追溯代码来解开谜底了。
其底层是使用 InheritableThreadLocal 来实现的。在新建线程或者复用线程时,使用切面编程创建或复用 InheritableThreadLocal 对象,并在其中存储 id、客户端等各种信息。在之后该线程及其子线程中,就可以透明的获取这些信息。基于这些信息动态获取配置内容就简单了。
InheritableThreadLocal
新版配置中心(使用 ZooKeeper 实现)有一个不可思议的功能。
在不传递 id 以及版本信息的情况下,可以基于配置内容动态的获取配置值。更不可思议的是,配置中心的客户端实例是一个单例模式。