官网
- Nacos Spring Cloud 快速开始Nacos Spring Cloud 快速开始https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
- Releases · alibaba/nacos · GitHuban easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. - Releases · alibaba/nacoshttps://github.com/alibaba/nacos/releases
如何启动Nacos
进入Nacos文件的bin目录,cmd启动命令窗口,输入startup.cmd -m standalone即可启动
账号:nacos
密码:nacos
访问地址: http://192.168.222.1:8848/nacos/index.html
Nacos快速入门
- 在父项目的pom.xml文件中引入SpringCloudAlibaba依赖
<!--SpringCloudAlibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
- 在所有子模块中引入nacos-discovery依赖
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 在所有子模块的配置文件中配置服务地址
#Nacos服务
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: order-service #当前子模块的服务名称
- 服务发现:在子模块中编写配置类,添加负载均衡策略
<!--编写配置类-->
@Configuration
public class RestTemplateConfiguration {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
Nacos模型
- 命名空间(namespace):物理隔离,命名空间之间相互隔离,不能互相访问,默认命名空间是public
- 分组(group):逻辑隔离,不同分组之间也不可以相互访问
- 集群:服务的多级存储模型,不同集群之间可以相互访问
集群配置
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
cluster-name: HZ # 集群名称
- 在配置文件中使用全局NacosRule负载均衡 - 实现同集群优先
@Bean
public IRule iRule() {
return new NacosRule();
}
Nacos的服务实例的两种类型
- 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
- 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。
spring:
cloud:
nacos:
discovery:
ephemeral: false # 设置为非临时实例
Naxos配置管理
- 添加子模块的nacos配置文件
- 在子模块中引入Nacos配置中心依赖(前提:父项目的pom文件已引入了父依赖SpringCloudAlibaba)
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 在子模块中引入微服务专用配置:bootstrap.yaml文件
spring:
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: 127.0.0.1:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
配置热更新
- classes.name举例,首先需要在nacos配置中心中添加class.name:zs配置,在子模块中读取该配置
- 方式一:属性配置:在@Value注入的变量所在类上添加注解@RefreshScope
@RestController
@RequestMapping("/order")
@RefreshScope
public class OrderController {
@Value("${classes.name}")
private String name;
@GetMapping("/name")
public String getName(){
return name;
}
- 方式二:配置类:在子模块服务中,添加一个配置类,使用@ConfigurationProperties注解代替@Value注解
@Component
@Data
@ConfigurationProperties(prefix = "classes")
public class PatternProperties {
private String name;
}
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private ClassesProperties classesProperties;
@GetMapping("/name")
public String getName(){
return classesProperties.getName();
}
}
Nacos集群搭建
- 初始化数据库:前往/nacos/conf文件夹下找到数据库初始化脚本mysql-schema.sql文件,创建数据库nacos并导入mysql-schema.sql脚本
- 配置数据库连接信息:在/nacos/conf文件夹下找到application.properties文件,修改数据库相关配置信息
- 配置Nacos集群信息:重命名/nacos/conf文件夹下cluster.conf.example文件为cluster.conf,并编辑集群信息
- 搭建集群:将上述配置的Nacos文件夹根据需求复制对应份数,进入conf/application.properties文件修改对应端口
- 启动:分别进入bin目录使用cmd命令:startup.cmd standalone启动
- 访问:配置nginx反向代理负载均衡
upstream nacos-cluster { server 127.0.0.1:8849; server 127.0.0.1:8850; server 127.0.0.1:8851; } server { listen 8848; server_name localhost; location /nacos { proxy_pass http://nacos-cluster; } }