官方文档:https://nacos.io/zh-cn

Nacos 配置

客户端

父 POM

  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>com.alibaba.cloud</groupId>
  5. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  6. <version>2.2.1.RELEASE</version>
  7. <type>pom</type>
  8. <scope>import</scope>
  9. </dependency>
  10. </dependencies>
  11. </dependencyManagement>

项目 POM

<dependencies>

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>


  <!-- 注册中心 -->
  <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  </dependency>

  <!-- 配置中心 -->
  <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  </dependency>

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>

</dependencies>

配置

server:
  port: 4000

spring:
  application:
    name: nacos-provider # 服务名称
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 # 服务注册中心地址

management:
  endpoints:
    web:
      exposure:
        include: "*" # 暴露所有端点

服务端

启动时注意选择启动模式

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

注册中心

这里我们启动了两个服务,分别是 power-0,power-1,配置与上述完全相同,只是微服务的名字使用相同的名称, spring.application.name=nacos-power ,这样就可以标识这两个微服务属于同一类

Nacos 判断服务是以 服务名 + IP 地址 + 端口号 来标识服务的 Eureka 是以 服务名 + 服务 ID 来标识服务的

image.png

Nacos 的负载均衡使用的是 Ribbon 来实现的,同样是使用 微服务名称 来调用

@SpringBootApplication
@EnableDiscoveryClient
public class AppNacos {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(AppNacos.class, args);
    }

    @RestController
    public class EchoController {

        @Autowired
        private RestTemplate restTemplate;

        @GetMapping("/echo")
        public String echo() {
            return "Hello Nacos Discovery";
        }

        @GetMapping("/call-power")
        public Object callPower() {
            return restTemplate.getForObject("http://nacos-power/echo", String.class);
        }
    }
}

配置中心

依赖

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

配置 bootstrap.yml

spring:
  application:
    name: nacos-provider # 服务名称
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 # 服务注册中心地址
      config:
        server-addr: 127.0.0.1:8848 # 服务配置中心地址
        file-extension: yml
        prefix: nacos-client-test # 优先级高于 spring.application.name
        group: DEV_GROUP # 默认为 DEFAULT_GROUP
        namespace: 6b701cf8-2a20-464e-a06a-f6e71e930624

management:
  endpoints:
    web:
      exposure:
        include: "*" # 暴露所有端点

说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

在 Nacos Spring Cloud 中,dataId 的完整格式如下: ${prefix}-${spring.profiles.active}.${file-extension} 其中 prefix > spring.application.name

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

集群搭建

搭建方式参考:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

image.png
因此开源的时候推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面
http://ip1:port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。
http://VIP:port/openAPI 挂载VIP模式,直连vip即可,下面挂server真实ip,可读性不好。
http://nacos.com:port/openAPI 域名 + VIP模式,可读性好,而且换ip方便,推荐模式

搭建步骤

1、cluster.conf

配置集群所在的地址和端口号

192.168.254.151:8848
192.168.254.152:8848
192.168.254.153:8848

2、application.properties

指定数据库连接地址(可以指定多个数据库)

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.254.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root

3、启动

sh startup.sh

Nginx 反向代理

通过 Nginx 反向代理,我们就可以直接通过 Nginx 来访问 Nacos 了

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    upstream nacos_server { 
        server 192.168.254.151:8848;
        server 192.168.254.152:8848;
        server 192.168.254.153:8848;
    }

    server {
        listen       8848;
        server_name  localhost;

        location /nacos/ {
            proxy_pass http://nacos_server;
            proxy_set_header Host $http_host;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}