暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Nacos的那些事儿(二):入门功法

HERO笔记 2021-03-06
871

      引言:本文只讲解Nacos配置管理方面的使用,服务的注册与发现,请在官网自行了解。https://nacos.io/zh-cn/docs/quick-start.html


运行环境:(注意版本号)

    JDK1.8 ;spring-boot  2.2.2.RELEASE ;

    nacos-config-spring-boot-starter  0.2.4 ;

    spring-cloud-starter-alibaba-nacos-config  2.2.2.RELEASE


一、Nacos的关键概念



1,Nacos数据模型



      ”磨刀不误砍柴工“,先把nacos基本的概念搞清楚。Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),Group分组默认是 DEFAULT_GROUP,DataId 是唯一标识。

namespace命名空间,一般来区分不同的环境,如pro、test、dev;

group: 分组,一般为项目层面的命名,如order-service

dataId唯一,一般是服务模块名或配置文件的标志,如 commons-mq-config-test.yaml

2,支持的数据类型



目前支持:text/json/yaml/properties等。

test: info = test
json: { "info":"test"}
yaml: info: test  (注意:yaml格式冒号后有个空格)
properties: info=test


一、JavaApi的基本调用



    先来试试知道了是什么东西,那怎么用的?先来体验下

1,jar包引用


<dependency>
      <groupId>com.alibaba.boot</groupId>
      <artifactId>nacos-config-spring-boot-starter</artifactId>
      <version>0.2.4</version>
</dependency>

2,代码实现


/**
 * @author HERO
 * @date 2021/3/1
 * @project_name springboot-demo
 */

public class NacosDemo {

    public static void main(String[] args) {
        try {
            String serverAddr = "172.16.2.182:8848";
            String dataId = "example";
            String group = "DEFAULT_GROUP";
            Properties properties = new Properties();
            properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);

            ConfigService configService = NacosFactory.createConfigService(properties);
            String content = configService.getConfig(dataId, group, 5000);
            System.out.println(content);

            configService.addListener(dataId, group, new Listener() {
                @Override
                public void receiveConfigInfo(String configInfo) {
                    System.out.println("recieve:" + configInfo);
                }
                @Override
                public Executor getExecutor() {
                    return null;
                }
            });
        } catch (NacosException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


二、SpringBoot的基本调用


   

1,jar包引用


<dependency>
      <groupId>com.alibaba.boot</groupId>
      <artifactId>nacos-config-spring-boot-starter</artifactId>
      <version>0.2.4</version>
</dependency>


2,参数配置


#application.properties文件中
#ip:port ,注意端口要加上,即使是80端口

nacos.config.server-addr=127.0.0.1:8848


3注解引用



    保存配置文件,./start.sh -m cluster 启动访问即可 (注意配置文件里设置的端口)。


/**
 * 粒度最小可以控制在controller级别,autoRefreshed=true开启自动更新
 * @NacosPropertySource 用于加载dataId为example的配置源,group默认为DEFAULT_GROUP,NameSpace默认为public
 */

@NacosPropertySource(dataId = "example",autoRefreshed = true)
@RestController
public class HelloController {
    /**
     * @NacosValue可以获取yaml/properties/test格式,不能直接获取json格式
     * info: 表示key
     * local info:代表默认值,如果key不在,则使用默认值。为高可用策略
     * autoRefreshed:开启自动更新
     */

    @NacosValue(value = "${info:local info}",autoRefreshed = true)
    private String info;

    @GetMapping("/hello")
    public String hello(){
        System.out.println(info+LocalDateTime.now());
        return info;
    }
}


4测试



    1,通过Nacos控制台,增加配置。

    2,访问接口获取配置的值。


三、SpringCloud的基本调用


   

1,jar包引用


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


2,参数配置



      创建bootstrap.properties文件,并在bootstrap.properties中添加Nacos配置,这里的dataId粒度为项目。

      Spring Boot中有两种上下文配置,bootstrap和application。bootstrap是应用程序的父上下文,加载优先于application。由于在加载远程配置之前,需要读取Nacos配置中心的服务地址,所有Nacos服务地址等属性配置需要放在bootstrap.properties文件中。

#必须在boottrap.properties声明
spring.profiles.active=test

#域名/ip:port,即使80端口,也要加上
spring.cloud.nacos.server-addr=172.16.2.182:8848

#namespace非必要配置,默认为public。配置时,值为namespace对应的MD5
spring.cloud.nacos.config.namespace=a712a034-40bd-420a-a88a-26cf784cdc94

#group非必要配置,默认为DEFAULT_GROUP
spring.cloud.nacos.config.group=DEFAULT_GROUP

#Nacos Spring Cloud中 dataId = ${prefix}-${spring.profiles.active}.${file-extension}
#prefix 默认为spring.application.name,可以通过spring.cloud.nacos.config.prefix优先指定。
#active 可以为空,dataId = ${prefix}.${file-extension}
#file-extension 内容格式,只支持properites和yaml
#此次配置:dataId = nacos-demo-test.yaml
spring.application.name=springboot-demo
spring.cloud.nacos.config.prefix=nacos-demo
spring.cloud.nacos.config.file-extension=yaml

# 若存在同一个Key,上面的优先级大于ext-config; extension-configs[X] X的值越大,优先级越高。
# 扩展配置,用于实现支持多个配置
spring.cloud.nacos.config.extension-configs[0].data-id=nacos-demo-test0.yaml
spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[0].refresh=true


3,注解引用


/**
 * 粒度最小可以控制在controller级别,autoRefreshed=true开启自动更新
 * @NacosPropertySource 用于加载dataId为example的配置源,group默认为DEFAULT_GROUP,NameSpace默认为public
 */

@NacosPropertySource(dataId = "example",autoRefreshed = true)
@RestController
public class HelloController {
    /**
     * @NacosValue可以获取yaml/properties/test格式,不能直接获取json格式
     * info: 表示key
     * local info:代表默认值,如果key不在,则使用默认值。为高可用策略
     * autoRefreshed:开启自动更新
     */

    @NacosValue(value = "${info:local info}",autoRefreshed = true)
    private String info;

    @GetMapping("/hello")
    public String hello(){
        System.out.println(info+LocalDateTime.now());
        return info;
    }
}

4.注解引用



@RestController
//@RefreshScope 实现配置自动更新
@RefreshScope
public class HelloController {
    /**
     * 注意:此处使用Spring的@Value注解,不是@NacosValue
     */

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

    @GetMapping("/hello")
    public String hello(){
        System.out.println(info+LocalDateTime.now());
        return info;
    }
}


以上内容就是本次分享的Nacos相关的调用,看完赶快打开IDEA吧,

Talk is cheap. Show me the code


HERO笔记


今日单曲循环~

我是HERO,快来关注我吧。
      这是我的学习笔记公众号,让我们一起努力~


关于文章,如果你有什么好的建议都可以私信我哦~~



文章转载自HERO笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论