安装-启动-访问
- 注意项目里的nacos版本一定要与外部的nacos版本一致,如果不行就尝试都升级为2.0以上(2.0的nacos客户端兼容1.4的服务端)
- 解压后,
cd nacos/bin- 下载的一个压缩包里已经有linux和windows2个版本的了,tar.gz与zip2种安装包内容都一样。
- 启动
startup.cmd/.sh -m standalonestandalone模式是开发环境中的模式,该模式可以轻易搭建nacos单节点。并且该模式默认使用了内嵌的数据库apache derby- 如果是集群部署,需要配置一下主机的地址:将位于
conf/cluster.conf.example的这个文件的.example删除,即启用集群配置。里面写集群主机的地址(注意如果nacos的主机是当前主机,那么项目里可以写127.0.0.1,但是**cluster**里面必须使用对外的接口不能使用**127.0.0.1**),没有用的删除或者注释
- 关闭
shutdown.cmd/.sh 访问:
略链接
作为注册中心
依赖
一般是通过
dependencyManagement定义spring-cloud-alibaba-dependencies的信息,alibaba-dependencies默认了子项目(组件)的版本如果已经使用了
eureka项目,要转为nacos,使用spring-cloud-starter-alibaba-nacos-discovery将spring-cloud-starter-netflix-eureka-client替换掉<dependency> <!-- 自动引入 Ribbon --><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></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}}
```yamlspring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848group:xxx# 日志设置logging:level:root: INFOpattern:console: "${CONSOLE_LOG_PATTERN:\%clr(${LOG_LEVEL_PATTERN:%5p}) \%clr([%15.15t]){faint} \%clr(%-40.40logger{39}){cyan} \%clr(:){faint} \%m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}}"
启用服务注册与发现
@Slf4j
@Configuration //这个没啥意义吧,直接把启用写在main上
@EnableDiscoveryClient // 看这里,看这里,看这里
public class NacosDiscoveryConfiguration {
}
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=yamlspring: 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,不是 ymlnacos配置
- 注册中心的配置放在
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公共配置
公共配置是指能被多个微服务访问的配置,而非属于某个服务的配置。公共配置又叫共享配置
- 在nacos上创建公共配置文件。公共配置文件命名可以随意(后缀还是要的)。公共配置其他和普通的nacos配置一样
- 服务的本地配置文件添加公共配置路径,可以添加多个共享配置文件。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.yamlspring: 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的建表语句位于
建好库与表后修改
nacos目录/conf/application.properties文件中Config Module Related Configurations下的注释即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=1nacos配置中心里的配置里不允许有中文(注释也不行) 要么删除中文注释。要么添加虚拟机参数-Dfile.encoding=UTF-8
