介绍完Nacos作为注册中心的基本功能和高级特性,本节我们回到SpringOrder项目,讨论在案例系统中集成注册中心的实现过程。
对于注册中心而言,SpringOrder要做的事情就是把所有微服务都注册到Nacos中。因此,从案例分析角度讲,我们只需要实现SpringOrder中order-service、account-service和product-service这3个微服务的注册过程即可,如图2-24所示。
图2-24 SpringOrder服务注册过程
我们在2.3节中已经介绍了基于Nacos实现服务注册的配置过程。如果我们只需要指定一个Nacos服务器地址,那么使用前面介绍的配置方法是可以满足需求的。但在现实开发过程下,所有的微服务都是运行在某一个特定的环境中,常见的包括本地环境、开发环境、测试环境、生产环境等。而对于这些不同的环境,我们通常都需要配置数据源、日志以及一些在软件运行过程中的基本配置。显然,为每一个环境都准备一份配置文件并不是一个最佳选择,会导致配置信息的冗余,不便管理。这时候,我们就可以引入Maven的Profile机制。
Profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个Profile,然后每个Profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果,如图2-25所示。
图2-25 Profile使用效果
那么如何在Maven中使用Profile呢?针对特定项目的Profile配置我们可以定义在该项目的POM文件中,如代码清单2-11所示的就是常见的一种Profile定义方法。
代码清单2-11 Maven Profile定义代码
这里定义了四个环境,分别是本地环境、开发环境、测试环境、生产环境,其中我们通过设置activeByDefault属性为true默认激活了本地环境,这样如果在不指定Profile时系统就会自动使用本地环境。
介绍完Profile机制,接下来我们再来分析Maven所具备的另一项非常实用的功能,即属性变量。在Maven中包含内置属性、POM属性、环境变量属性和自定义属性等多种属性定义和使用方法,而前面Profile中定义实际上就属于是一种POM属性。如果想要在配置项中引用POM属性,可以使用如代码清单2-12所示的实现方法。
代码清单2-12 Maven引用POM属性配置代码
当对Spring Boot工程进行打包时,Maven就会根据当前激活的Profile自动替换上述配置项中的@spring.profiles.active@和@spring.cloud.nacos.discovery.server-addr@这两个POM属性。假设当前激活的Profile是local,那么上述配置项就会自动变成代码清单2-13所示的效果。
代码清单2-13 Maven引用POM属性效果
当然,如果你想要通过命令行来指定所需要激活的Profile,可以使用如代码清单2-14所示的Maven命令。
代码清单2-14 Maven基于Profile打包命令代码
代码清单2-14中代码的执行效果就是激活了test这个Profile,意味着该微服务将连接测试环境的Nacos服务器进行服务注册。图2-26展示了将SpringOrder项目中3个微服务都注册到Nacos中的效果。
图2-26 SpringOrder项目中的微服务注册效果
随着SpringOrder项目的不断演进,我们在后面还会注册新的微服务到Nacos中。