目录
项目地址:https://gitee.com/itzhl/nacosDemo.git
1.Nacos下载安装
1.1 下载
官网下载地址:https://github.com/alibaba/nacos/releases
选择一个最新的稳定版本。zip是Windows版本,tar.gz是Linux版本
1.2 解压
下载完成之后,解压,进入目录,如下:
其中,
bin:可执行命令;
conf:配置文件;
target:nacos应用jar包;
当nacos运行起来之后,还会有data、logs
data:数据;
logs:运行日志
1.3创建表
config下的nacos-mysql.sql 是建表语句,在数据库中建一个nacos库,执行sql建表。
修改配置application.properties的数据库配置,如图所示,nacos项目的根目录是/nacos,启动端口为8848。
1.4 修改启动脚本startup.cmd
nacos默认使用的集群模式cluster,本机需要修改为单机模式standalone。
1.5 使用startup.cmd来启动nacos
1.6 登录 nacos,访问nacos管理页面
nacos的根路径为/nacos,默认端口号为8848。因此后台的访问路径为:http://localhost:8848/nacos
账号密码都是:nacos。
可以作为配置中心:
服务列表查看服务:
不同的命名空间,可以区分环境
2、dubbo整合nacos
2.1服务生产者
pom文件
父项目
<properties>
<spring.boot.version>2.2.4.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR1</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.0.RELEASE</spring.cloud.alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
子项目:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
配置文件:
对外暴露的服务地址写在配置文件中。
server:
port: 8080
spring:
application:
name: nacos-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#命名空间
namespace: 16699661-8b2c-4b27-926a-a1aecdaa122d
dubbo:
consumer:
timeout: 600000
scan:
#自己向外提供服务的service的包地址
base-packages: com.example.service
protocol:
#dubbo协议
name: dubbo
#dubbo 协议端口( -1 表示自增端口,从 20880 开始)
port: -1
#注册到nacos注册中心
registry:
address: nacos://localhost:8848
register: true
subscribe: true
启动类添加注解
@EnableDiscoveryClient
@EnableDubbo
@SpringBootApplication
提供service类和方法,项目打包以便于消费者引用
2.2服务消费者
配置文件
server:
port: 8081
spring:
application:
name: nacos-client
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: 16699661-8b2c-4b27-926a-a1aecdaa122d
dubbo:
consumer:
timeout: 600000
# scan:
#自己向外提供服务的service的包地址
# base-packages: com.pubinfo.project.service
protocol:
#dubbo协议
name: dubbo
#dubbo 协议端口( -1 表示自增端口,从 20880 开始)
port: -1
#注册到nacos注册中心
registry:
address: nacos://localhost:8848
register: true
subscribe: true
pom文件和启动类注解与提供者相同,需要引入生产者的包。
使用:@Reference注解直接注入服务提供者的service类,直接调用。
3、Springboot整合nacos(http)
3.1服务生产者
pom文件与启动类注解同上
配置文件
server:
port: 8082
spring:
application:
name: nacos-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: 6fd5e05a-bf43-41b7-ad90-833e030956ae
提供接口
3.2服务消费者
pom依赖同上,新增一个loadbalancer:
<!-- 服务名访问,(负载均衡)-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
为了http请求,创建RestTemplate,加注解@LoadBalanced
使用http方式请求生产者,地址使用生产者在服务中心注册的名称
4、Nacos配置 中心
涉及更新方式就有2种,推和拉;
- 客户端主动从服务端定时拉取配置,如果有变化则进行替换。
- 服务端主动把变化的内容发送给客户端。
两种方式各有利弊,比如对于推的模式来讲,就需要服务端与客户端进行长连接,那么这种就会出现服务端需要耗费大量资源维护这个链接,并且还得加入心跳机制来维护连接有效性。而对于拉的模式则需要客户端定时去服务端访问,那么就会存在时间间隔,也就保证不了数据的实时性。那nacos采用哪种模式呢?nacos是采用了拉模式是一种特殊的拉模式,也就是我们通常听的长轮询机制。
nacos服务端收到请求后检查配置是否发生变化,如果没有则开启定时任务,延迟29.5s执行。
微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。
但如果尚未读取application.yml,又如何得知nacos地址呢?
因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:
application.yml可以全部放入配置中心,bootstrap.yml配置注册中心:
spring:
application:
name: nacos-client
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml #指定yaml格式的配置
group: DEFAULT_GROUP
namespace: 16699661-8b2c-4b27-926a-a1aecdaa122d
refresh-enabled: true
profiles:
active: dev
使用注解热加载,修改配置可以实时生效@RefreshScope
5、Nacos脑裂
脑裂(split-brain)就是“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”。裂通常会出现在集群环境中,比如ElasticSearch、Zookeeper集群,而这些集群环境有一个统一的特点,就是它们有一个大脑,比如ElasticSearch集群中有Master节点,Zookeeper集群中有Leader节点。
在leader选举的时候,需要半数投票通过才能选举成为leader;公式:节点投票数>总节点数/2。或者说不低于:size/2+1。