文章目录
一、nacos安装
1、windows安装
- nacos官网:https://nacos.io/zh-cn/
2. 下载nacos:前往GitHub页面选择zip进行下载。(centos的下一节讲)
- 解压后的目录如下:
- 进入bin目录后打开控制台,输入“startup.cmd -m standalone”命令来启动nacos(standalone代表单机执行)
- 浏览器输入:http://localhost:8848/nacos
用户名密码都是nacos
2、contos安装
参考我的另外一篇文章:centos8安装nacos2.0.3
更多关于nacos的操作,跳转官网查看对应文档:Nacos快速开始
二、nacos作为服务注册中心演示(服务提供者)
1、新建module:cloudalibaba-provider-payment9001
2、pom文件
父pom:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
本模块的pom:
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.7.1</version>
</dependency>
<!--SpringBoot启动时报错,需要引入以下依赖-->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
<!--nacos服务注册-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3、application.yml
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
management:
endpoints:
web:
exposure:
include: '*'
4、启动类
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentApplication9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentApplication9001.class, args);
}
}
5、业务类
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/payment/nacos/{id}")
public String getServerPort(@PathVariable("id") Integer id){
return "Nacos Provider registry, serverPort:" + serverPort + "id: " + id;
}
}
6、测试
直接启动该模块,然后去nacos–服务列表–服务查看上可以看到:
至此我们nacos的服务注册中心和服务提供者9001都ok了
7、创建第二个服务提供者9002
这里不想写代码,因此直接复制一份服务提供者9001,更改端口为9002然后启动
此时我们可以看到nacos服务注册已经搭配好集群模式:
三、nacos作为服务注册中心演示(服务消费者)
1、新建module:cloudalibaba-consumer-nacos-order9003
2、pom文件
照搬服务注册中心的pom文件,并添加其他依赖:
<!-- 需要手动指定loadbalancer版本,
这里注意要和org.springframework.cloud:spring-cloud-commons版本统一 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.1.1</version>
</dependency>
3、application.yml
server:
port: 9003
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
#消费者将要去访问的微服务者名称
service-url:
nacos-user-service: http://nacos-payment-provider
4、启动类
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication9003 {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication9003.class, args);
}
}
5、配置类
这里我们需要使用Loadbalancer+RestTemplate来进行负载均衡,因此需要配置这个类
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
6、业务类
@RestController
public class OrderNacosController {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverUrl;
@GetMapping(value = "/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Integer id) {
return restTemplate.getForObject(serverUrl+"/payment/nacos/"+id,String.class);
}
}
7、启动并查看nacos
8、测试:http://localhost:9003/consumer/payment/nacos/1
多次刷新该请求,可以看到已经实现负载均衡
四、nacos作为服务配置中心
替代了Cloud Config和Cloud Bus的组合,更加方便
1、新建module:cloudalibaba-config-nacos-client3377
2、pom文件
<dependencies>
<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>
<exclusions>
<exclusion>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.1</version>
<exclusions>
<exclusion>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--spring-boot-starter-web与 cloud中的版本冲突,因此这里统一版本-->
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.30</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.7.1</version>
</dependency>
<!--避免出现bootstrap配置无效的情况-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
</dependencies>
3、bootstrap.yml
优先级比application高,这里设置统一配置
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
file-extension: yaml
4、application.yml
spring:
profiles:
active: dev #开发环境
5、启动类
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientApplication.class,args);
}
}
6、业务类
@RestController
@RefreshScope //通过cloud的原生注解来支持Nacos的动态刷新功能
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
7、在nacos进行配置
配置规则参考nacos官方文档:
然后我们进入自己的nacos进行新建:
7、测试
- nacos配置中心配置完成
- 启动我们的项目并进行测试http://localhost:3377/config/info
- 修改配置中心的配置信息,然后再次访问http://localhost:3377/config/info
五、nacos的分类配置
1、Namespace+Group+Data ID三者关系?为什么这么设计?
(1)是什么
类似Java里面的package名和类名,最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
(2)三者情况
默认情况:Namespace=public,Group=DEFAULT_GROUP, 默认Cluster是DEFAULT
Nacos默认的命名空间是public,Namespace主要用来实现隔离。比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。 Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去 Service就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。 最后是Instance,就是微服务的实例。
2、DataID配置
(1)nacos新建test
(2)修改application.yml
(3)重启测试
3、Group分组方案
(1)新建dev_group
(2)新建test_group
(3)修改application.yml
(4)修改bootstrap.yml为自己想要的group
(5)重启测试
4、Namespace空间方案
(1)新建命名空间
最终效果:
(2)修改bootstrap.yml
这个namespace对应的值就是我们在nacos中的命名空间ID
(3)修改application.yml
(4)在dev的命名空间下新建配置
(5)重启测试
六、nacos持久化
在0.7版本之前,在单机模式时nacos使用嵌入式数据库derby实现数据的存储,不方便观察数据存储的基本情况,而且在集群模式下我们无法保证数据一致性。
因此0.7版本以后增加了支持mysql数据源能力,具体的操作步骤:
1.安装数据库,版本要求:5.6.5+
2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
然后修改application.properties中的数据库配置:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow
然后重新启动,这样我们就可以把数据持久化到MySQL指定数据库中
七、nacos集群
1、集群部署架构图
自己的理解:
2、步骤总结
这里不进行赘述,我们可以理解成需要通过nginx访问nacos集群,放官方文档说明:集群部署说明