微服务实践(二)Nacos

Nacos下载

官网下载地址:https://github.com/alibaba/nacos/releases

选择一个最新的稳定版本。zip是Windows版本,tar.gz是Linux版本

Nacos安装

下载完成之后,解压,进入目录,如下

bin:可执行命令;conf:配置文件;target:nacos应用jar包。

当nacos运行起来之后,还会有data、logs。data:数据;logs:运行日志

进入到conf文件夹

  • application.properties是nacos单机启动配置文件。
  • application.properties.example单机默认配置文件。
  • cluster.conf.example是nacos集群默认配置文件。
  • nacos-logback.xml是日志配置文件。
  • nacos-mysql.sql是mysql数据库初始化脚本。
  • schema.sql是Derby 数据库初始化脚本。

接下来导入数据库初始化脚本,在本地mysql新建nacos数据库并执行nacos-mysql.sql脚本

然后编辑application.properties文件修改数据连接信息。

然后切到bin目录下,修改启动脚本startup.cmd,nacos默认使用的集群模式cluster,需要修改为单机模式standalone。

然后使用startup.cmd来启动nacos。

访问 http://localhost:8848/nacos/index.htm登录nacos管理后台,账号密码默认 nacos/nacos。

进入到命名空间页面,命名空间一般用于不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。这里我们创建两个环境 :local,dev用于区分本地和开发环境。

接下来进入到配置列表进行添加配置。

Nacos Spring Cloud 中,Data ID的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

整合SpringBoot

这里以创建好的订单服务为例

  1. 添加配置中心依赖:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>${latest.version}</version>
</dependency>

2.添加注册中心依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>${latest.version}</version>
</dependency>

注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。

更多版本对应关系参考:版本说明 Wiki

3.在 bootstrap.yml中配置 Nacos server 的地址和应用名

spring:
  application:
    name: order-center-server
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        namespace: a506f87b-88c7-4fb9-bea4-c59881e140e8  
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: a506f87b-88c7-4fb9-bea4-c59881e140e8
server:
  port: 8092
namespace、group不填默认为 public和DEFAULT_GROUP,这里namespace填上 local对应的namespace ID。

添加好依赖和配置后在应用上添加注解@EnableDiscoveryClient开启服务注册发现功能:
@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication {
	public static void main(String[] args) {
		SpringApplication.run(OrderCenterServiceApplication.class, args);
	}
}

启动应用,可以看到打印的注册信息。

可以看到注册成功,接下来为订单服务新建一条配置信息内容如下:

配置内容目前只添加了数据库信息,可根据自己业务需求添加对应的配置

通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新:

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${testConfig}")
    private String useLocalCache;

    @RequestMapping("/get")
    public String get() {
        return useLocalCache;
    }
}

访问http://localhost:8091/config/get 可以看到配置进行了刷新。

参阅资料

https://nacos.io/zh-cn/docs/v2/concepts.html

https://nacos.io/zh-cn/docs/v2/ecology/use-nacos-with-spring-cloud.html