安装-启动-访问

  • 注意项目里的nacos版本一定要与外部的nacos版本一致,如果不行就尝试都升级为2.0以上(2.0的nacos客户端兼容1.4的服务端)
  • 解压后,cd nacos/bin
    • 下载的一个压缩包里已经有linux和windows2个版本的了,tar.gz与zip2种安装包内容都一样。
  • 启动 startup.cmd/.sh -m standalone
    • standalone模式是开发环境中的模式,该模式可以轻易搭建nacos单节点。并且该模式默认使用了内嵌的数据库apache derby
    • 如果是集群部署,需要配置一下主机的地址:将位于conf/cluster.conf.example的这个文件的.example删除,即启用集群配置。里面写集群主机的地址(注意如果nacos的主机是当前主机,那么项目里可以写127.0.0.1,但是**cluster**里面必须使用对外的接口不能使用**127.0.0.1**),没有用的删除或者注释
  • 关闭 shutdown.cmd/.sh
  • 访问:

    • 默认端口8848
    • 控制台:[http://127.0.0.1:8848/nacos](http://127.0.0.1:8848/nacos)
    • 默认用户名与密码都是nacos

      Docker安装Nacos

  • 链接

    作为注册中心

    依赖

  • 一般是通过dependencyManagement定义spring-cloud-alibaba-dependencies的信息,alibaba-dependencies默认了子项目(组件)的版本

  • 如果已经使用了eureka项目,要转为nacos,使用spring-cloud-starter-alibaba-nacos-discoveryspring-cloud-starter-netflix-eureka-client替换掉

    1. <dependency> <!-- 自动引入 Ribbon -->
    2. <groupId>com.alibaba.cloud</groupId>
    3. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    4. </dependency>
    5. <dependency>
    6. <groupId>org.springframework.cloud</groupId>
    7. <artifactId>spring-cloud-starter-openfeign</artifactId>
    8. </dependency>

    配置

  • 注册中心的配置放在**application**或者**bootstrap**都可以 ```properties

    配置nacos的地址,如果是集群,添加多个时使用逗号分隔

    spring.cloud.nacos.discovery.server-addr=192.172.0.180:8848

配置服务发现的组的名称

spring.cloud.nacos.discovery.group=xxx

日志设置

logging.level.root=INFO logging.pattern.console=${CONSOLE_LOG_PATTERN:%clr(${LOG_LEVEL_PATTERN:%5p}) %clr(|){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}}

  1. ```yaml
  2. spring:
  3. cloud:
  4. nacos:
  5. discovery:
  6. server-addr: 127.0.0.1:8848
  7. group:xxx
  8. # 日志设置
  9. logging:
  10. level:
  11. root: INFO
  12. pattern:
  13. console: "${CONSOLE_LOG_PATTERN:\
  14. %clr(${LOG_LEVEL_PATTERN:%5p}) \
  15. %clr([%15.15t]){faint} \
  16. %clr(%-40.40logger{39}){cyan} \
  17. %clr(:){faint} \
  18. %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}}"

启用服务注册与发现

@Slf4j
@Configuration  //这个没啥意义吧,直接把启用写在main上
@EnableDiscoveryClient  // 看这里,看这里,看这里
public class NacosDiscoveryConfiguration {

}

nacos服务分组

  • 不同分组的微服务,彼此之间不能发现对方,也就不能进行远程服务调用。逻辑上,不同的分组意味着这是两个不同的独立项目。即,你(微服务)从配置中拉取到的注册表只有可能是你所在组的注册表。

    • 将微服务分组,方便我们查看,以及方便配置管理分类。
    • 分组的作用是:多个项目可能使用同一个nacos作为注册中心,这时同属于一个组的服务作为一个项目,每个项目只能拉取自己组的注册表

      作为配置中心使用

  • spring cloud里主要的配置文件即bootstrap.yaml/properties 如果说**application**用于服务内的配置,那么**bootstrap**用于整个项目,服务之间的配置,先于**application**生效

    依赖

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

    bootstrap配置

  • bootstrap应该只保留配置中心,注册中心的基本配置。具体的服务配置应该保存到配置中心组件的配置文件里去

    • 注册中心的配置放在**application**或者**bootstrap**都可以。配置配置中心的配置放于bootstrap。具体的配置放于配置中心的配置文件
      #服务名
      spring.application.name=xxx-service
      #注册中心地址
      spring.cloud.nacos.discovery.server-addr=192.172.0.180:8848
      #配置中心地址
      spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.discovery.server-addr}
      #配置nacos配置文件的后缀,默认为properties,yaml时必须配置。nacos的配置可以自己写,也可以在nacos控制中心配置然后生成配置文件,配置文件可以生成多种格式的
      spring.cloud.nacos.config.file-extension=yaml
      
      spring:
      application:
      name: xxx-service
      cloud:
      nacos:
       discovery:
         server-addr: 127.0.0.1:8848
       config:
         server-addr: ${spring.cloud.nacos.discovery.server-addr}
         file-extension: yaml   # nacos 配置文件后缀。注意是 yaml,不是 yml
      

      nacos配置

  • bootstrap文件和application一样,可以存些自定义的配置

  • **data id**是配置文件的文件名,该文件名是配置文件在nacos系统里的唯一标识。
  • (dataId)的完整格式语法如下:项目名-active.文件类型后缀,例如:xxx-service-dev.yaml 。这就表示,这是 xxx-service 项目的 dev 配置文件。
    • 项目名即spring.application.name
    • active即spring.profile.active 没有指定active时那么dataid就不写active及其前面的-
    • 文件后缀要与spring.cloud.nacos.config.file-extension对应
  • Group的值与spring.cloud.nacos.config.group对应,没配置时默认为DEFAULT_GROUP

    动态刷新配置

  • 在直接使用或者间接使用了@**Component**的类上添加**@RefreshScope**即可(**@Configuration**类无效),网络上说使用了这些配置类的bean的类里,如控制器。也需要添加@RefreshScope注解。

    nacos公共配置

  • 公共配置是指能被多个微服务访问的配置,而非属于某个服务的配置。公共配置又叫共享配置

  1. 在nacos上创建公共配置文件。公共配置文件命名可以随意(后缀还是要的)。公共配置其他和普通的nacos配置一样
  2. 服务的本地配置文件添加公共配置路径,可以添加多个共享配置文件。yaml的配置还可以动态拼接,如**application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}**拼接active和文件类型,用**.**连接。最终结果大概是**application-dev.yaml**
    spring.cloud.nacos.config.shared-configs[0].data-id=share-config.yaml
    
    spring:
    cloud:
     nacos:
       config:
         shared-configs:
           - data-id: share-config.yaml
    

    修改nacos的数据存储

  • nacos默认的数据是存储于内嵌的数据库里(数据文件位于nacos/data通过配置可以修改数据存储方式(如存到指定mysql)

    • nacos的建表语句位于**nacos/cong/nacos-mysql.sql** sql里没有建库语句!需要自己建库(规范起见库名为**nacos**
      create database nacos 
      DEFAULT CHARACTER SET utf8mb4 -- 乱码问题
      DEFAULT COLLATE utf8mb4_bin -- 英文大小写不敏感问题
      ;
      
  • 建好库与表后修改nacos目录/conf/application.properties 文件中Config Module Related Configurations下的注释即mysql的配置示例

    • 修改后重启nacos即可(注意已有的配置需要手动同步到新库里) ```properties

      数据库类型

      spring.datasource.platform=mysql

Count of DB:

db.num=1 #不变

如果报不允许公开密匙,追加&allowPublicKeyRetrieval=true

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=nacos db.password.0=nacos

可选,连接池

Connection pool configuration: hikariCP ```

  • UNAVAILABLE: io exception 跟grpc有关。一般是项目里跟外部的版本不一致
  • input=1 nacos配置中心里的配置里不允许有中文(注释也不行) 要么删除中文注释。要么添加虚拟机参数-Dfile.encoding=UTF-8