【SpringCloud】Nacos入门(一)

724 阅读1分钟

1. 什么是nacos

nacos 是阿里巴巴的一个开源项目,能够实现动态服务发现、服务配置、服务元数据及流量管理。

2. nacos 安装

笔者这里为了学习方便,安装了 Window 的版本。acos-2.0.0-window版本

下载压缩包后,解压即可,之后进入 bin 目录下,在 cmd 下执行命令startup.cmd -m standalone,即可以单机模式启动。

Linux 版本与 Window 版本安装类似,只需下载并解压即可。启动命令为sh startup.sh -m standaloneacos-2.0.0-Linxu版本

如果成功启动,通过http://localhost:8848/nacos/index.html 即可进入nacos的控制台。默认账号密码为nacos/nacos。

3. 服务注册与发现 [Nacos discovery]

nacos 最常用的功能之一就作为注册中心。

使用 nacos 作为注册中心非常简单,只需要三步:

<1> 加入依赖。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<2> 启动类添加注解,@EnableDiscoveryClient 注解也可以省略。

@SpringBootApplication
@EnableDiscoveryClient
public class NacosApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosApplication.class, args);
    }
}

<3> 编写配置文件

spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos的地址

启动项目后,若能在控制台中看到注册的服务,则表示注册成功。

4. 编写一个小 demo 测试下

服务提供者:

@RestController
@RequestMapping
public class ServiceCotroller {

    @Value("${server.port}")
    String port;

    @RequestMapping("/listService")
    public String listService(){
        System.out.println("server port is " + port);
        return "server port is " + port;
    }
}

服务消费者:

@RestController
@RequestMapping
public class ConsumerController {

    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/getService")
    public String listService(){
        ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-test");
        String url = serviceInstance.getUri().toString() + "/listService";
        ResponseEntity<String> entity = restTemplate.getForEntity(url, String.class);
        return entity.getBody();
    }
}

5. nacos 概念

  • 命名空间(NameSpace):用于进行粒度的配置隔离,常用的场景之一是进行不同环境的资源隔离,默认是 public。配置:
spring.cloud.nacos.discovery.namespace=[namespaceId]
  • 服务分组(Group):设置服务所处的不同分组,不同分组间相互隔离,默认 DEFAULT_GROUP。
spring.cloud.nacos.discovery.group=[groupId]
  • 集群(Cluster):可以实现同集群间优先调用,例如同地集群间优先调用。
spring.cloud.nacos.discovery.cluster-name=[clusterName]

更多的配置可以查看:Nacos discovery 配置项信息

6. 配置中心[Nacos config]

如果使用 nacos 作为注册中心,需要添加依赖。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

并且必须使用 bootstrap.properties 配置文件来配置 nacos 的地址。

spring.application.name=config-demo
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

区分不同环境的配置文件

除了在加载 bootstrap.properties 之外,nacos 还会加载 dataid 为 ${spring.application.name}.properties${spring.application.name}-${profile}.properties 的配置文件。因此如果要区分不同环境的配置文件可以在bootstrap.properties中添加参数来进行配置:

spring.profiles.active=${profile}

使用多个配置文件

这两种方式需要带上文件后缀名

# 支持多个共享 Data Id 的配置
spring.cloud.nacos.config.shared-configs[n].data-id=dataId

# 支持多个扩展 Data Id 的配置
spring.cloud.nacos.config.extension-configs[n].data-id=dataId

注:在使用中除了 extension-configs[n] 的优先级大于 shared-configs[n] 之外,笔者并未找到其他关于这两种配置的区别,个人理解是这两种配置只是为了区分共享配置与扩展配置。希望了解的大佬可以告知。

关于 nacos 中配置的优先级:${spring.application.name}+[${profile}] 优先于上述的两种配置。

其他更多的配置请参考:Nacos-config 配置中心

参考

github.com/alibaba/spr…

nacos.io/zh-cn/docs/…