文章目录
一.概念
1.什么是nacos?
nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
nacos就是注册中心+配置中心的组合,即nacos=Eureka+Config+bus
2.各种注册中心比较?
3.Nacos支持AP和CP模式的切换
4.下载并运行Nacos?
下载地址:https://github.com/alibaba/nacos/releases/tag/1.1.4
运行:下载完,确保java环境与maven环境无误,执行进入到bin目录startup.cmd -m standalone 以单机版启动nacos(默认是集群式,没有集群会启动失败)
访问:http://127.0.0.1:8848/nacos
默认账号密码为nacos
二.把服务提供者注册到nacos
1.引入依赖
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--日常通用jar包配置-->
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.配置文件
server:
port: 9001
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #注册到nacos的地址
management:
endpoints:
web:
exposure:
include: '*' #暴露所有监控端口
3.编写主启动类
@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001
{
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class, args);
}
}
4.编写controller
@RestController
public class PaymentController
{
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id)
{
return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
}
}
5.测试
启动测试,访问http://127.0.0.1:9001/payment/nacos/1无误后,打开nacos,可以看到服务成功注册到nacos
为了测试集群,再建一个9002与9001一致
三.把服务消费者注册到Nacos
1.导入依赖
<dependencies>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.sise</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.配置文件
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848 #去哪里发现服务
service-url:
nacos-user-service: http://nacos-provider #通过服务提供者的名称调用服务
3.消费者启动类
@SpringBootApplication
@EnableDiscoveryClient
public class OrderNacosMain83 {
public static void main(String[] args) {
SpringApplication.run(OrderNacosMain83.class,args);
}
}
4.RestTemplate配置类
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
5.消费者访问接口
@RestController
@Slf4j
public class OrderNacosController {
@Autowired
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverUrl;
@GetMapping("/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id){
return restTemplate.getForObject(serverUrl+"/payment/nacos/"+id,String.class);
}
}
6.测试
先查看nacos是否注册上(其实消费端不用注册也可以)
Nacos天生支持负载均衡因为依赖引入了ribbon
访问http://127.0.0.1:83/consumer/payment/nacos/1成功
四.Nacos服务配置中心
1.导入依赖
<dependencies>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--web + actuator监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般基础配置-->
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.配置文件
application.yml
spring:
profiles:
active: dev
bootstrap.yml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
3.启动类
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
4.controller调用
@RestController
@RefreshScope //支持Nacos的动态刷新功能。
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
5.创建Nacos远程配置文件
Nacos中的dataid的组成格式与SpringBoot配置文件中的匹配规则
所以,需要在nacos配置中心配置一个名为nacos-config-client-dev.yaml的配置文件,作为项目的远程配置文件
6.测试
访问 http://127.0.0.1:3377/get/Info
动态刷新,将版本号修改,3377立即修改,自带动态刷新
五.Nacos分类管理
1.基本概念
- 类似Java里面的package名和类名
- 最外层的namespace是可以用于区分部署环境的, Group和DatalD逻辑上区分两个目标对象
Nacos默认的命名空间是public, Namespace主要用来实现隔离。
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace, 不同的Namespace之间是隔离的。
Group默认是DEFAULT_ GROUP
Group可以把不同的微服务划分到同一个分组里面去**
Service就是微服务;
一个Service可以包含多个Cluster (集群) ,Nacos默认Cluster是DEFAULT, Cluster是对指定微服务的一 个虚拟划分。
比坊说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一 个集群名称(HZ) 给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
后是Instance,就是微服务的实例。
Namepace+group+dataID
2.DataID方案配置
指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置
新建Test,两个DataID
3377通过指定不同开发环境,切换配置,(这时这里的配置名就组成了nacos-config-client-test.yaml )
spring:
profiles:
#active: dev
active: test
测试
切换为test了,配置是什么就加载哪个文件
六.Group方案配置
1.新建相同DataID 不同组的两个配置文件
通过Group实现环境区分,新建nacos-config-client-info.yaml
2. 修改3377的application.yml
spring:
profiles:
#active: dev
#active: test
active: info
3.在bootStrap.yml 里添加组
4.启动测试
七.Namespace配置方案
1.新建dev和test命名空间
2.新建相同DataID和namespace,不同GROUP的配置文件
这里以dev环境做测试
每一个Namespace都有自己的唯一id
新建3个配置,同一个DataID,不同GROUP,同一个namespace里,模拟在dev环境(namespace)里,有着一致的名字,根据组选择不同的配置文件(相同的名字就只需要修改3377的group就行)
3.在3377添加对应的命名空间及配置
4.测试
根据上面的配置,3377,启动后就会去,88993633-7913-4605-a611-1c65664d5107对应的namespace(dev命名空间)里找DEV_GROUP这个组的nacos-config-client-dev.yml
5.总结
一个系统中可以作为是一个group,group里有多个配置(DataID),每个配置对应一种环境
有多个微服务子项目可以使用namespace,一个项目对应一个namespace,namespace里有多个group,group对应多个开发环境,group里有多个配置,配置里能是不同的配置方案
八.Nacos持久化配置
1.Nacos支持三种部署模式
2.单机模式配置mysql
如果不配置mysql搭建集群的化,由于每个nacos持久化存储数据都是使用自己内嵌的数据库(Derby) 会导致数据一致性问题,所以需要配置mysql
- 初始化数据库文件,在nacos/condfig下有一个sql文件,将它初始化到mysql
- 修改nacos配置文件nacos\conf\application.properties,添加以下配置,注意需要加时区
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?serverTimezone=UTC&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=你数据库用户
db.password=废话,肯定是你密码
- 启动nacos,可以看到是个全新的空记录界面,以前是记录进derby,现在配置了mysql
- 新建一个配置文件,数据存储到mysql
九.Linux上配置集群
所以可以理解为我们需要像下面这张图一样配置集群模式
1.基本配置
在linux配置好mysql
-
下载nacos LInux版https://github.com/alibaba/nacos/releases/tag/1.4.1
-
在linux系统中解压,并且编辑application.properties
-
在配置文件里添加mysql配置,不使用默认内嵌的数据库
2.Linux服务器上nacos的集群配置cluster.conf
- 先备份cluster.conf.example
- 梳理出3台nacos机器的不同服务端口号
这个IP不能写127.0.0.1,必须是Linux命令hostname -i能够识别的IP
3.编辑Nacos的启动脚本/mynacos/nacos/bin/startup.sh,使他能够接受不同的启动端口
- 修改内容
4.配置nginx
消费端不在选择固定的nacos地址,而是交给nginx转发
- 修改nginx.conf
- 启动nginx
5.启动测试
修改消费端地址