spring cloud Alibaba 的 Nacos学习笔记

spring cloud Alibaba 的 Nacos学习笔记

文章目录

  • spring cloud Alibaba 的 Nacos学习笔记
    • 下载nacos
    • spring cloud Alibaba依赖
      • nacos-discovery依赖
      • nacos-config依赖
    • nacos-discovery的使用
      • 生产者application.yml配置
      • 生产者启动类
      • 生产者Controller
      • 消费者application.yml配置
      • 消费者的RestTemplate
      • 消费者的Controller
    • nacos-config的使用
      • bootstrap.properties配置
      • application.properties配置
      • 定位配置文件
      • 刷新配置
      • 数据模型

下载nacos

GitHub下载地址:Tags · alibaba/nacos (github.com)

下载安装都十分简单,下载下来解压,然后到bin目录运行那个startup文件即可。

spring cloud Alibaba 的 Nacos学习笔记_第1张图片

GitHub开始介绍的使用方式

On the Linux/Unix/Mac platform, run the following command to start server with standalone mode:

sh startup.sh -m standalone

On the Windows platform, run the following command to start server with standalone mode. Alternatively, you can also double-click the startup.cmd to run NacosServer.

startup.cmd -m standalone

官网快速开始教程:Quick Start for Nacos

官方网站:home (nacos.io)

官方的示例控制台模样:

spring cloud Alibaba 的 Nacos学习笔记_第2张图片

spring cloud Alibaba依赖

spring cloud Alibaba版本依赖可以去alibaba的github仓库的wiki查看:版本说明 · alibaba/spring-cloud-alibaba Wiki (github.com)

我这里用的spring cloud Hoxton版本所以依照官方文档的提示,我应该使用spring-cloud-alibaba-dependencies-2.2.6.RELEASE,也就是2.2.6.RELEASE版本的依赖。

如果需要使用 Spring Cloud Hoxton 版本,请在 dependencyManagement 中添加如下内容

<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-alibaba-dependenciesartifactId>
    <version>2.2.6.RELEASEversion>
    <type>pomtype>
    <scope>importscope>
dependency>

nacos-discovery依赖

官方网站GitHub:Nacos discovery · alibaba/spring-cloud-alibaba Wiki (github.com)


<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>

nacos-config依赖

<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>

nacos-discovery的使用

生产者application.yml配置

根据官网文档,nacos暴露的端口是8848

server:
  port: 8300

spring:
  application:
    name: nacos-order-producer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #nacos-server的地址
        
management:
  endpoints:
    web:
      exposure:
        include: *

生产者启动类

跟普通的服务发现应用一样,用注解@EnableDiscoveryClient开始服务发现功能。

@SpringBootApplication
@EnableDiscoveryClient        //开启服务发现
public class NacosProviderDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosProducerDemoApplication.class, args);
    }
}

生产者Controller

@RestController
public class EchoController {
    @GetMapping(value = "/echo/{string}")
    public String echo(@PathVariable String string) {
        return "Hello Nacos Discovery " + string;
    }
}

消费者application.yml配置

消费者这边的配置跟生产者的配置没有什么太多改变

server:
  port: 8301

spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #nacos-server的地址  

消费者的RestTemplate

nacos内置了ribbon做均匀负载,所以我们消费端使用ribbon做均匀负载。

spring cloud Alibaba 的 Nacos学习笔记_第3张图片

创建RestTemplate的bean时,在上面添加@LoadBalanced注解。以开启均匀负载功能。

@Configuration
public class TemplateConfig {

    @Bean("restTemplate")
    @LoadBalanced
    public RestTemplate getrestTemplate(){
        return new RestTemplate();
    }
}

消费者的Controller

通过服务名调用消费端提供的服务,因为加了@LoadBalanced开启了均匀负载。

@RestController
@Slf4j
public class OrderController {
    private static final String PAMENT_URL = "http://nacos-order-producer";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/comsumer/echo/{string}")
    public String create(@PathVariable String string){
        return restTemplate.getForObject(PAMENT_URL+"/echo/"+string,String.class);
    }
}

nacos-config的使用

nacos除了使服务发现功能外还能作为配置中心进行工作。

bootstrap.properties配置

一点要使用bootstrap.yaml或者bootstrap.properties,bootstrap为系统级别的配置文件,优先级高最先加载,并且不会被application覆盖。

这里配置nocas server的地址即可。

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=example
#spring.cloud.nacos.config.file-extension: yaml #配置获取文件的后缀

application.properties配置

spring.profiles.active=dev

定位配置文件

根据官网的信息,如何定位要想要的配置文件呢,通过一些dataId去定位获取。

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

刷新配置

根据官网的提示,nacos是会自动广播刷新配置的,我们利用spring cloud@RefreshScope注解进行配置刷新的验证。nacos相比传统的spring cloud bus +spring cloud config要好用很多。

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @RequestMapping("/get")
    public boolean get() {
        return useLocalCache;
    }
}

数据模型

nocos有自己定义识别数据空间,可以通过三个维度的定位锁定指定的唯一的数据或配置文件。里面有写数据模型的结构:Nacos 架构

这里简单简述就是:命名空间(Namespace),分组(Group),数据ID(Service/DataId)

  • 默认命名空间名为:public
  • 默认分组名为:DEFAULT_GROUP

通过Namespace+Group+DataId锁定唯一的资源。如下配置:

#锁定资源nacos命名空间下的order分组下的nacos-order-consumer-dev.yaml文件
spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        group: order
        namespace: nacos
  profiles:
    active: dev

你可能感兴趣的:(spring,cloud,spring,java,nacos)