SpringBoot使用Nacos

Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台。

Nacos特性

  • 支持配置中心管理(含图形化界面)
  • 部署交付简单
  • 包含注册中心,不用独自搭建配置和注册中心。
  • 完美集成spring cloud和dubbo,拓展性好

1、Nacos基本原理

Nacos作为注册中心分为server与client。
Server采用Java编写,为client提供注册发现服务与配置服务。而client可以用多语言实现,client与微服务嵌套在一起,nacos提供sdk和openApi,如果没有sdk也可以根据openApi手动写服务注册与发现和配置拉取的逻辑。

1.1、注册中心原理

服务注册方法:服务注册的策略的是每5秒向nacos server发送一次心跳,心跳带上了服务名,服务ip,服务端口等信息。同时 nacos server也会向client 主动发起健康检查,支持tcp/http检查。如果15秒内无心跳且健康检查失败则认为实例不健康,如果30秒内健康检查失败则剔除实例。

1.2、配置中心原理

 

2、Nacos-Server服务部署

Nacos依赖Java环境来运行,需要保证JDK版本在1.8以上。

Nacos Server有两种运行模式:standalone模式和cluster模式。

2.1、下载nacos-server

wget https://github.com/alibaba/nacos/releases/download/2.0.3/nacos-server-2.0.3.tar.gz

2.2、解压nacos-server安装包到指定目录

tar -zxvf nacos-server-2.0.3.tar.gz -C /usr/local/

2.3、配置startup.sh和application.properties脚本

startup.sh 在解压后的bin目录

/usr/local/nacos/bin

application.properties 在解压后的conf目录

/usr/local/nacos/conf

修改startup.sh脚本JAVA_HOME的内容,替换成服务器中java安装目录的绝对路径,可通过以下命令寻找服务器中java的安装目录

whereis java

2.4、启动nacos-server ,并进行登录验证

./startup.sh -m standalone

查看日志 

tail -n 50 -f /usr/local/nacos/logs/start.out

输入nacos访问地址:http://127.0.0.1:8848/nacos
默认用户名/密码:nacos/nacos

2.5、cluster 模式

开发和测试,我们直接用standalone 模式没什么问题。但是生产环境,为了保证Nacos的高可用,我们就得使用cluster模式。
cluster 模式必须要用MySQL,MySQL数据导入和上面一致,然后修改配置文件:

conf/cluster.conf

填入要运行Nacos Server机器的IP

2.6、创建nacos-server数据库

初始化脚本在nacos-server解压后的conf子目录下,本例子中的全路径是:

/usr/local/nacos/conf/nacos-mysql.sql

数据库自己先在mysql服务中提前创建好
我创建的数据库是nacos-server(自己根据实际情况命名)
然后在nacos-server数据库中执行初始化脚本nacos-mysql.sql

修改application.properties中有关数据库的内容。
首先,删除数据库中相关配置的注释,以打开mysql数据配置,然后将mysql数据库中的地址替换成nacos-server所在数据库的地址,用户名以及密码也要改成对应的。

spring.datasource.platform=mysql
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos-server?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

Nacos采用的一个Leader节点,多个Follower节点的集群架构,数据一致性算法采用的是Raft。

3、Nacos-Client配置

3.1、nacos实现配置中心

(1)添加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

(2)配置application.properties文件或者bootstrap.properties文件

#配置服务的名字
spring.application.name=provider-service

#nacos配置中心的地址
spring.cloud.nacos.config.server-addr=nacos.ailijie.top

#nacos配置的编码方式
spring.cloud.nacos.config.encode=utf-8

#配置组名子,需要在nacos的配置设置,不然找不到
spring.cloud.nacos.config.group=PROVIDER_GROUP

#配置后缀,properties不需要
spring.cloud.nacos.config.file-extension=yml

#加载nacos多个配置文件
spring.cloud.nacos.config.shared-dataids=provider-service.properties,test.properties

#刷新加载的其他环境
spring.cloud.nacos.config.refreshable-dataids=provider-service.properties,test.properties

bootstrap.properties是nacos远程配置文件,假如选择这个,则需登录nacos控制台添加配置文件。

 

(3)使用nacos配置中心,客户端会定时心跳拉取配置,环境变量会动态刷新,但是在bean中需要使用 @RefreshCode注解去刷新,不然不生效。数据库配置可以自定义数据源。加载其他配置文件的话,需要使用refres-dataids去刷新环境。

@RefreshScope
@RestController
public class TestController {

   @Value("${name}")
    private String name;

    @RequestMapping(value = "/test", method = GET)
    public String test(){
        return name;
    }
}

3.2、nacos实现注册中心

(1)添加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

(2)在启动类上添加 @EnableDiscoveryClient 注解

@SpringBootApplication
@EnableDiscoveryClient
public class TestDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestDemoApplication.class, args);
    }
}

(3)配置application.properties文件

#配置服务名字
spring.application.name=xxx-service

#配置服务集群名字
spring.cloud.nacos.discovery.cluster-name=consumer-service

#配置注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848


​​​​​​​

猜你喜欢

转载自blog.csdn.net/watson2017/article/details/124044432