来源:哪吒编程 大家好,附源码我是实战哪吒。 在单体服务时代,置中关于配置信息,原理管理一套配置文件即可。附源码 而拆分成微服务之后,实战每一个系统都会有自己的置中配置,并且都各不相同,原理有些配置还需要动态改变,附源码以达到动态降级、实战切流量、置中扩缩容等目的原理。 在Spring Boot开发中,实战可以把配置项放到config文件中,置中把配置当代码使用。比如: { ; ; } 也可以通过@Value加载yaml配置文件中的配置。 { String config_CORE_POOL_SIZE; ) { HttpConfig.config_CORE_POOL_SIZE = corePoolSize; } } 无论是将配置定义在代码中,还是将配置写在yaml配置文件中,都相当于把配置存在应用程序的本地。 如果想修改配置,就需要将在Linux服务器中部署的程序停止,然后手动修改其配置,再进行重启。 如果修改的配置项较多,源码库这也是一项容易出错,而且繁琐的事情,长期运维的小伙伴应该深有体会。 当时,我就在想,作为世界上使用人数最多的语言,更新一个配置,需要这么复杂吗? 答案肯定不是的。 配置中心(Configuration Center)通常用于集中管理应用程序的配置信息。这些配置信息可以包括数据库连接信息、外部服务地址、日志级别、超时设置等。配置中心可以提高应用部署的灵活性和可维护性。 程序启动时,可以自动从配置中心拉取所需要的配置项,配置中心中配置有所改变时,同样可以自动从配置中心拉取最新的配置信息,服务不需要重新发布。 项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。 Nacos采用的是Pull模式获取服务端数据,客户端采用长轮询的方式定时的发起Pull请求,去检查服务端配置信息是否发生了变化。 这种是最简单的Nacos注册中心,有若干个服务,都注册到Nacos注册中心,调用之前,先到Nacos获取对应接口,然后进行实际的调用。 服务1和服务2和Nacos之间维护一个心跳关系,每5秒跳一次,频率不能太快或者太慢,否者会嗝屁的。 也可以通过服务端主动注销的方式,停止注册。 服务1调用服务2时,服务1会通过定时任务到Nacos中获取在线的服务,保证所调用的服务一直都是健康在线的状态。 获取到之后,用缓存将其保存起来,然后通过负载均衡器调用服务2,此时,将不再使用服务端的负载均衡Nginx了。 这些功能可以帮助降低分布式系统中管理配置信息的成本,降低因错误的配置信息变更带来可用性下降甚至发生故障的风险。 配置中心的配置注册通常包括以下步骤: 通过这种方式,配置中心实现了配置的统一管理和动态更新。服务提供者和消费者都可以通过配置中心来进行配置的注册和获取,大大提高了配置的灵活性和便利性。同时,也减少了因为手动配置错误而导致的问题,提高了系统的稳定性和可用性。 要通过Java代码实现配置注册到配置中心,你可以遵循以下步骤。这里继续提供一个通用的示例代码,以展示基本的流程和步骤。请注意,实际的代码可能会因所使用的具体配置中心而有所不同。 com.configcenter.sdk.ConfigCenterClient; com.configcenter.sdk.exception.ConfigCenterException; com.configcenter.sdk.model.Configuration; { { ; ; Configuration(); ); ); ); { ConfigCenterClient client = ConfigCenterClient.init(serverUrl, authToken); success = client.registerConfiguration(configuration); (success) { ); { ); } (ConfigCenterException e) { + e.getMessage()); e.printStackTrace(); } } } 在这个示例中: 配置中心的配置反注册是指从配置中心中移除或注销某个配置项的过程。当某个服务或应用不再需要使用某个配置项时,可以进行配置反注册操作。这个操作通常通过配置中心提供的接口来完成,它会将指定的配置项从配置中心中删除或标记为注销状态。 配置反注册可以是手动触发的,也可以是自动触发的。 配置反注册是配置中心的一个重要功能,它可以帮助管理员或开发者更好地管理配置项的生命周期,确保配置中心中的数据与实际应用需求保持一致。同时,通过反注册不再需要的配置项,也可以减少配置中心的存储空间和资源消耗。 要通过Java代码实现配置反注册,你需要使用配置中心提供的Java SDK或API。以下是一个示例代码,展示了如何使用Java来实现配置反注册。 com.configcenter.sdk.ConfigCenterClient; com.configcenter.sdk.exception.ConfigCenterException; { { ; ; ConfigCenterClient client = ConfigCenterClient.init(serverUrl, authToken); ; { success = client.deregisterConfiguration(configurationId); (success) { ); { ); } (ConfigCenterException e) { + e.getMessage()); e.printStackTrace(); } } } 在这个示例中: 通过配置中心的用户界面和API接口,你可以方便地查看和管理配置项。 com.configcenter.sdk.ConfigCenterClient; com.configcenter.sdk.exception.ConfigCenterException; com.configcenter.sdk.model.Configuration; { { ; ; ; { ConfigCenterClient client = ConfigCenterClient.init(serverUrl, authToken); Configuration configuration = client.getConfiguration(configurationId); ) { + configuration.getId()); + configuration.getKey()); + configuration.getValue()); { ); } (ConfigCenterException e) { + e.getMessage()); e.printStackTrace(); } } } 在上面的示例代码中: 配置中心通常支持配置变更订阅功能,允许应用程序或其他服务订阅配置项的变更通知。当配置项发生变化时,配置中心会向订阅者发送通知,以便订阅者能够及时获取最新的配置项。 要通过Java代码实现配置变更订阅,你可以按照以下步骤进行操作: 下面是一个简单的示例代码,展示如何实现配置变更订阅: com.configcenter.sdk.ConfigCenterClient; com.configcenter.sdk.exception.ConfigCenterException; com.configcenter.sdk.listener.ConfigurationChangeListener; com.configcenter.sdk.model.Configuration; { { ConfigurationChangeListener() { { + configuration.getValue()); } }; { ConfigCenterClient client = ConfigCenterClient.init(serverUrl, authToken); client.subscribeToConfigurationChanges(filter, listener); (ConfigCenterException e) { + e.getMessage()); e.printStackTrace(); } } } 最终,选择微服务注册中心是一个权衡的过程,需要根据自己的实际需求、技术栈、团队熟悉度等因素进行综合考虑。 在Eureka、Consul、Zookeeper和Nacos这几个微服务注册中心中,选择最适合的一个取决于你的具体需求和环境。 最终的选择应基于你的技术需求、团队熟悉度和业务场景。一、附源码本地配置
二、配置中心
1、以Nacos为例:
配置中心的信息一般都是服务器托管放在bootstrap.yml 中;初始化的时候,Bootstrap Context负责从外部源加载配置属性并解析配置;Bootstrap属性有高优先级,默认情况下,它们不会被本地配置覆盖;然后再读取application.yml中的配置,进行配置合并,完成项目的启动。2、Pull模式
3、也可以通过Nacos实现注册中心
三、配置中心提供了哪些功能
配置项管理:支持添加、发布、修改配置项以及配置项的分组,可以实现版本管理,支持热发布、灰度发布、环境隔离,提供API接口与可视化操作页面。权限控制:配置项访问控制,读权限和写权限。操作审计:支持记录用户的操作行为。配置变更:当有新的配置项或是现有的配置项发生变动时,配置中心能够进行实时的监控并做出相应的处理。配置推送:通过订阅/发布的模式,将配置信息推送给各个服务的消费者。历史版本管理:保存所有的配置历史版本,并提供查询和对比的功能,可以轻松的回滚到任何一个版本。灰度发布:通过配置中心可以实现在部分环境中先发布新的配置项,观察一段时间没有问题后再推送给其他所有的环境。配置变更审计:记录每次配置的修改记录,方便追踪和管理。四、如何操作配置中心
1、配置注册
2、配置反注册
3、配置查看
4、配置变更订阅
五、主流的微服务注册中心有哪些,如何选择?
1、在选择微服务注册中心时,可以考虑以下因素:
功能和特性:不同的注册中心可能具有不同的功能和特性,需要根据自己的需求来选择。例如,一些注册中心可能更侧重于服务发现,而另一些可能提供更全面的配置管理功能。性能和稳定性:注册中心作为微服务架构的核心组件,其性能和稳定性至关重要。需要对候选的注册中心进行性能测试和稳定性评估,确保它们能够满足你的业务需求。易用性和开发体验:注册中心的易用性和开发体验也是选择的重要因素。选择一个提供良好开发文档、客户端库和工具的注册中心,可以使开发过程更加顺畅高效。社区支持和生态系统:一个活跃和健康的社区可以为注册中心提供持续的支持和改进。同时,一个丰富的生态系统可以提供更多的集成选项和解决方案。因此,需要评估候选注册中心的社区活跃度和生态系统成熟度。安全性和合规性:安全性和合规性对于任何系统都至关重要。需要确保所选的注册中心能够提供足够的安全保障,并满足你的合规性要求。2、主流注册中心
3、如何选择?
如果你使用Spring Cloud作为微服务框架,Eureka可能是一个自然的选择,因为它与Spring Cloud集成良好。如果你需要强大的跨平台支持和一致性保证,Consul是一个不错的选择。如果你已经在使用Zookeeper或其他Apache项目,并且希望在同一生态系统中解决服务注册和发现问题,那么Zookeeper可能适合你。如果你在寻找一个简单且与阿里巴巴技术栈集成的解决方案,Nacos是一个值得考虑的选项。