栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Nacos入门

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nacos入门

Nacos 1 nacos-sever 1.1 下载安装

https://github.com/alibaba/nacos/releases

1.2 部署

解压后启动:

sh bin/startup.sh -m standalone

-m standalone表示单机启动。

部署后访问localhost:8848/nacos可访问nacos控制台,然后以nacos/nacos(用户名/密码)登录。

停止nacos-server使用如下命令:

sh bin/shutdown.sh
1.3 数据持久化

nacos-sever默认使用的是derby数据库来保存数据的,derby是一个基于内存的数据库,所以在服务重新启动后,derby中保存的数据就会丢失。

在Nacos控制台命名空间菜单项中新建一个命名空间。然后重新启动,会发现新建的命名空间不见了。

  • 本地数据库

准备本地数据库,在数据库中执行nacos-server中./conf/nacos-mysql.sql,准备表数据。

  • 配置Mysql连接信息

修改nacos-server 项目中的./conf/application.properties数据库相关配置:

### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=1234
  • 重启server
> sh ./bin/shutdown.sh 
The nacosServer(52861) is running...
Send shutdown request to nacosServer(52861) OK
> ./bin/startup.sh -m standalone

在Nacos控制台命名空间菜单项中新建一个命名空间。然后重新启动,会发现新建的命名空间还在,说明持久化配置成功。

1.4 集群配置
  • 环境准备

将nacos-server复制出来3个,修改这3个nacos-server中conf/application.properties中的端口号及数据库配置。这三个nacos-server的端口分别为8848,8849,8850。

  • 集群配置

分别将naocs-server下的cluster.conf.example复制为cluster.conf,并在末尾修改或添加如下配置:

192.168.0.125:8848
192.168.0.125:8849
192.168.0.125:8850
  • 启动

分别在三个nacos-server下执行下面的命令启动:

sh bin/startup.sh

三个nacos-server启动后,访问127.0.0.1:8848/nacos, 127.0.0.1:8849/nacos, 127.0.0.1:8850/nacos可以访问对应的nacos-server。

在nacos-server控制台的集群管理->节点列表中可以看到三个server服务节点。

1.2 nacos-client 2.1 注册中心 准备

在Nacos控制台中命名空间菜单添加一个一个新的命名空间Test(命名空间ID项要为Test,与后面演示一致)。

父工程依赖

pom.xml



    4.0.0

    
    
        spring-boot-starter-parent
        org.springframework.boot
        2.6.3
    

    org.example
    nacos
    1.0-SNAPSHOT
    
        nacos-client01
    
    pom

    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                2021.0.1
                pom
                import
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2021.0.1.0
                pom
                import
            
        
    


本工程

pom.xml



    
        nacos
        org.example
        1.0-SNAPSHOT
    
    4.0.0

    nacos-client01

    
        
        
            org.springframework.cloud
            spring-cloud-starter-bootstrap
        

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        

        
            org.springframework.boot
            spring-boot-starter-web
        

    



启动类

NacosClientApp.java

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

bootstrap.yml

server:
  port: 9000
spring:
  application:
    name: nacos-client
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: Test # 默认为Public
        group: TEST_GROUP # 默认为DEFAULT_GROUP

以上信息配置完成后,启动项目,观察nacos控制台服务管理->服务列表->Test中有当前服务。

服务名分组名称集群数目实例数健康实例数触发保护阈值操作
nacos-clientTEST_GROUP111false详情示例代码订阅者 删除
添加接口

NacosProviderController.java

@RestController
@RequestMapping("/provider")
public class NacosProviderController {

    @Value("${server.port}")
    private Integer port;

    @GetMapping("/port")
    public Integer port() {
        return port;
    }

    @GetMapping("/info")
    public String info() {
        return "Nacos provider info";
    }

}

重启服务,使接口生效。

2.2 服务消费

添加新的服务,作为消费方消费上面nacos-client提供的服务。

添加依赖

pom.xml



    
        nacos
        org.example
        1.0-SNAPSHOT
    
    4.0.0

    nacos-consumer01

    
        
        
            org.springframework.cloud
            spring-cloud-starter-bootstrap
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
        
        
            org.springframework.cloud
            spring-cloud-starter-loadbalancer
        
        
        
            org.springframework.boot
            spring-boot-starter-web
        
    



配置

bootstrap.yml

server:
  port: 9010

spring:
  application:
    name: nacos-client-consumer01
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: Test
        group: TEST_GROUP

启动类

NacosConsumerApp.java

@SpringBootApplication
@EnableDiscoveryClient
// 开启Feign支持
@EnableFeignClients
public class NacosConsumerApp {
    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApp.class, args);
    }
}

Feign Client

NacosProviderClient.java

@FeignClient("nacos-client")
public interface NacosProviderClient {


    @GetMapping("/provider/port")
    Integer port();

    @GetMapping("/provider/info")
    String info();

}

请求接口

NacosConsumerController.java

@RestController
@RequestMapping("/consumer")
public class NacosConsumerController {
    @Resource
    private NacosProviderClient nacosProviderClient;

    @GetMapping("/provider/port")
    public Integer providerPort() {
        return nacosProviderClient.port();
    }

    @GetMapping("/provider/info")
    public String providerInfo() {
        return nacosProviderClient.info();
    }
}

启动项目访问接口,可正常访问到nacos-client服务。

2.2 配置中心

注册中心采用父工程+子模块的方式演示,为了能理清晰的知道导入的依赖的作用,该项目为单模块项目演示。

添加依赖

pom.xml



    4.0.0

    
        spring-boot-starter-parent
        org.springframework.boot
        2.6.3
        
    


    org.example
    nacos-config-client
    1.0-SNAPSHOT

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                2021.0.1
                pom
                import
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2021.0.1.0
                pom
                import
            
        
    

    
        
            org.springframework.cloud
            spring-cloud-starter-bootstrap
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
        
            org.springframework.boot
            spring-boot-starter-web
        
    


启动类

NacosConfigClientApp.java

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

bootstrap.yml

基本配置

server:
  port: 9003

spring:
  profiles:
    active: dev
  application:
    name: nacos-config-client
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        # 命名空间
        namespace: Test
        # 分组
        group: TEST_GROUP
        # 文件后缀
        file-extension: yml

对于以上配置,需要在Nacos控制台对应的namespace下新建一个配置文件,文件分组要为TEST_GROUP。

配置文件命名组成:

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

进入Nacos控制台在Test命名空间下添加配置。 Data Id: nacos-config-client-dev.yml Group: TEST_GROUP 配置格式: yaml 配置内容:

server:
  port: 10003

配置好后启动项目。 控制台可以看到类似如下日志输出:

Ignore the empty nacos configuration and get it based on dataId[nacos-config-client] & group[TEST_GROUP]
Ignore the empty nacos configuration and get it based on dataId[nacos-config-client.yml] & group[TEST_GROUP]
.......
listening config: dataId=nacos-config-client-dev.yml, group=TEST_GROUP
listening config: dataId=nacos-config-client.yml, group=TEST_GROUP
listening config: dataId=nacos-config-client, group=TEST_GROUP

项目最终在10003端口(Nacos中配置)启动。

如果项目启动不是10003端口,而是本地配置文件中的端口,检查Nacos中的配置文件是否配置正确,如命名空间、分组配置。

配置动态刷新
  • 添加配置 修改Nacos中配置文件中的配置,并发布:
server:
  port: 10003

info: Nacos config test
  • 读取配置 编写AutoRefreshController.java读取配置:
@RefreshScope // 刷新配置
@RestController
@RequestMapping("/config")
public class AutoRefreshController {

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

    @GetMapping("/info")
    public String configInfo() {
        return info;
    }
}

启动项目,访问/config/info,可以看到接口返回配置文件中配置的内容。更改Nacos中的配置,再次访问接口查看响应数据也跟着发生变化。
@RefreshScope

多配置文件(扩展多个配置)
  • 配置文件

通过extension-configs添加多个配置文件:

server:
  port: 9003

spring:
  profiles:
    active: dev
  application:
    name: nacos-config-client
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        namespace: Test
        group: TEST_GROUP
        file-extension: yml
        # 添加扩展配置
        extension-configs:
          - dataId: datasource.yml
            group: DATASOURCE_GROUP
            # 是否自动刷新
            refresh: true
          - dataId: redis.yml
            group: CACHE_GROUP
            refresh: false
  • Nacos控制台添加配置

Data Id: datasource.yml
Group: DATASOURCE_GROUP
内容:

datasource:
  platform: mysql

Data Id: redis.yml
Group: CACHE_GROUP
内容:

redis:
  host: 127.0.0.1

  • 新增接口访问配置
@RefreshScope
@RestController
@RequestMapping("/config")
public class ConfigController {

    @Value("${datasource.platform}")
    private String datasourcePlatform;

    @Value("${redis.host}")
    private String redisHost;

    @GetMapping("/datasource/platform")
    public String datasourcePlatform() {
        return datasourcePlatform;
    }

    @GetMapping("/redis/host")
    public String redisHost() {
        return redisHost;
    }

}

启动项目,访问新增的两个接口,接口将响应新增的配置文件中对应的内容。(如果项目启动报错@Value加载不到配置,需要检查配置文件是否正确)。

  • 测试动态刷新

确保接口开启了自动刷新,@RefreshScope。由于配置文件datasource.yml开启了refresh,而redis.yml没有开启refresh,所以在nacos修改redis.yml的内容时,接口无法动态获取并刷新。

2.3 配置中心、服务发现及集群配置 依赖

pom.xml



    
        org.springframework.boot
        spring-boot-starter-parent
        2.6.3
        
    

    4.0.0

    org.example
    1.0-SNAPSHOT
    nacos-client-cluster

    
        8
        8
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                2021.0.1
                pom
                import
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2021.0.1.0
                pom
                import
            
        
    

    
        
            org.springframework.cloud
            spring-cloud-starter-bootstrap
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
        
            org.springframework.boot
            spring-boot-starter-web
        
    


启动类

NacosClientClusterApp.java

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

配置

bootstrap.yml

server:
  port: 9004

spring:
  application:
    name: nacos-client-cluster
  cloud:
    nacos:
      server-addr: 192.168.0.125:8848,192.168.0.125:8849,192.168.0.125:8850
      discovery:
        namespace: Test
        group: TEST_GROUP
      config:
        namespace: Test
        group: TEST_GROUP
        file-extension: yml
Nacos-server中添加配置文件

Data ID: nacos-client-cluster.yml

Group: TEST_GROUP

配置格式: YAML

配置内容:

info: nacos client cluster info
添加接口

ClientInfoController.java

@RestController
public class ClientInfoController {

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

    @Value("${server.port}")
    private Integer port;

    @GetMapping("/info")
    public String info() {
        return info;
    }

    @GetMapping("/port")
    public Integer port() {
        return port;
    }

}

打成可执行jar包

要把项目打包成一个可执行jar包,在pom.xml添加如下配置:


    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
    

在项目根目录执行:

mvn package

执行完成后在 **项目根目录/target/**会生成nacos-client-cluster-1.0-SNAPSHOT.jar。

运行jar

执行下面命令运行jar包,使用多个服务构成集群

java -jar nacos-client-cluster-1.0-SNAPSHOT.jar --server.port=9004 
java -jar nacos-client-cluster-1.0-SNAPSHOT.jar --server.port=9005  
java -jar nacos-client-cluster-1.0-SNAPSHOT.jar --server.port=9006 

分别启动项目后,在nacos控制台服务管理->服务列表能看到服务nacos-client-cluster有三个实例。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/836463.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号