项目地址列表项目只需要一个简单的配置文件即可完成配置管理。如果同时配置多个项目、多个环境,会造成配置管理非常复杂的情况。这时候就需要用到配置中心了。它的原理其实和redis缓存类似。不同的是,配置中心只专注于配置,更多的是方便配置的功能。大致功能如下:同时,这些功能也是本次要开发的配置中心需要包含的功能。本次开发的配置中心是基于nodejs版本的。客户端获取配置的方式可以参考协议开发自己的客户端SDK。目前提供的是javascript版本。功能设计与配置中心的开发基于nodejs。这里先看看大概的流程。从上面可以看出,一个配置中心的主要功能包括:数据存储。这里使用存储协议来匹配各种存储形式。定时任务。这包括计划存储和自定义计划更新任务。网站。主要目的是提供一种简单快捷的方式来设置配置。心跳检测。客户端使用TCP协议连接到配置中心,可以监控配置变化,及时获取最新的配置内容。将开发功能实现到具体的开发中其实非常简单。很多时候,可能只需要一个理解和实践的过程。在这里我给大家介绍一下大概的思路。数据存储存储只有两个目的:存储使用的配置。这只是用户登录的列表、存取款功能的简单实现。本教程目前只实现本地json文件的读写。如果你想使用MySQL或者Redis,你可以按照下面的协议自己实现。init(),存储库的初始化方法。它会在项目启动时第一次被调用。list(),获取命名空间列表。这里使用命名空间来区分不同的配置文件。这里默认使用def来保存第一个文件。all(namespace="def"),获取对应命名空间下的配置内容。update(namespace,txt),更新一个命名空间的所有配置。这里传入了一个字符串,同时也保存了一个字符串。get(key,namespace="def"),获取对应命名空间下某个字段的内容。这里需要警惕,配置不一定是json对象。set(key,val,namespace="def"),设置对应命名空间下某个字段的值。login(user,pwd),登录判断,当前返回true或false。只要仓库实现了上述协议,项目的存储方式就可以无痕更换。一个固定的定时任务只能周期性的存储当前缓存的配置数据。这里一是为了在项目重启时获取上次保存的配置内容,二是防止程序崩溃时保存的数据丢失。程序的内容设置了一个状态变量改变了。如果相应的配置发生变化,其状态将变为true。定时保存任务在启动时会将数据保存在版本库中。自定义定时任务的目的是设置一个配置结果和定时时间,时间到时触发更新操作。这个功能实现起来非常简单,但是对于使用它的人来说却是一个非常有用的功能。例如:某些产品在半夜2点定时推出。...没有必要熬夜等待。本次分享的项目还没有实现这个自定义定时更新的功能。该功能将在后续更新中逐步完善。网站网站是完成配置的地方。默认情况下,该项目提供了几个用于获取和更新配置的接口。目前使用jQuery实现,界面比较简单,基本功能已经实现。这里可以看到最上面是命名空间的标签。接下来是添加命名空间。再往下是显示和编辑配置的地方。心跳检测心跳其实是配置中心的核心内容。它的主要任务是及时、快速地通知客户端配置有更新,需要使用最新的配置。服务端使用nodejs的net.createServer方法创建一个TCP监听服务。如果客户端连接,它会将客户端的连接对象放入对象缓存池中。连接时,这里做了两件事:在连接对象中添加一个uuid,方便不同客户端的识别。通知客户端发送身份验证令牌。这里的逻辑比较简单,只是一个简单的验证。连接之后就是心跳检测的过程。客户端需要定期更新自己的状态,服务端根据这个请求更新客户端的最后存在时间。添加超时或断开连接意味着客户端断开连接,客户端将从对象缓存池中移除。如果网站更新了相应的配置,服务器会主动将名称发送给客户端。该命令类似于操作|名称空间|change值,客户端根据收到的命令触发客户端的配置更新监听器,使用远程api更新客户端的缓存配置。客户端本身会自动更新配置内容,同时提供监控方式监控配置变化。多环境配置在服务器根目录下有一个config目录,是为服务器多环境提供的配置。你只需要根据NODE_ENV的值创建对应的文件即可。项目启动时,会根据环境参数自动使用对应文件的配置。如果要问客户端的多环境?命名空间已完全实现。如果想增加更多层次的环境参数,可以自定义命名空间的命名协议,如:test.conf1,可以在不改变主程序的情况下实现多层次的配置环境。代价是需要修改网站的界面。...结束语至此,一个nodejs版本的轻量级配置中心就开发完成了。如果以上功能全部完成,这个项目就不仅仅是一个轻量级的配置中心了。其功能不亚于其他开源配置中心。有兴趣的可以一起参与更新最佳配置中心。项目地址
