nacos学习笔记_01

nacos学习笔记_01


1、关于nacos

请访问如下链接:https://www.jianshu.com/p/7da2e950162b

2、下载nacos客户端(不再做描述)

Nacos依赖于Java环境,所以必须安装Java环境。然后从官网下载Nacos的解压包,安装稳定版的,下载地址:https://github.com/alibaba/nacos/releases

3、启动

在bin/start.cmd中可以看到如下内容:
在这里插入图片描述
cluster表示集群部署时的启动方式,单应用启动时直接运行start.cmd会报错,在bin目录下打开cmd命令,通过如下方式启动:

start.cmd -m standalone

启动成功之后如下页面表示启动成功:
在这里插入图片描述

4、应用

搭建一个分布式项目,包含如下两个模块:
1> 服务提供模块 nacos_provide
2> 服务消费模块 nacos_consume
具体搭建步骤不在赘述,项目结构如下:
在这里插入图片描述
在父模块中添加如下maven依赖


```xml
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.0.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
  </dependency>

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>

  <!--nacos-->
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  </dependency>
  <!-- 关键 -->
  <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.4</version>
  </dependency>
  <!-- 这个需要为 true 热部署才有效 -->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <optional>true</optional>
  </dependency>

  <!-- 使用配置中心方式 -->
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  </dependency>

  <!--Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,
  从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。-->
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  </dependency>


  <!--feign 客户端-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>
  <!--引入okhttp-->
  <dependency>
      <groupId>io.github.openfeign</groupId>
      <artifactId>feign-okhttp</artifactId>
  </dependency>

  <!-- swagger -->
  <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.9.2</version>
  </dependency>
  <!-- swagger-ui -->
  <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>2.9.2</version>
  </dependency>
</dependencies>

<dependencyManagement>
  <dependencies>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-dependencies</artifactId>
          <version>Hoxton.RELEASE</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-alibaba-dependencies</artifactId>
          <version>2.2.0.RELEASE</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
  </dependencies>
</dependencyManagement>

4.1、服务提供者—服务注册与发现、配置中心使用简介

新建服务提供者nacos_provide,鼠标右键父项目,maven,Reimport,刷新maven依赖;

启动类配置:

@EnableSwagger2 //swagger文档配置,有兴趣的自行查阅学习
@EnableDiscoveryClient  //核心,代表自己是一个客户端
@SpringBootApplication

添加配置文件bootstrap.yml(一定是bootstrap.yml文件,不是application.yml文件),内容如下:

server:
  port: 9991
  servlet:
    context-path: /provide
spring:
  application:
    ##代表Nacos Config中的Data ID
    name: ak-nacos-provide
  cloud:
    nacos:
      config:
        ##指定配置名为ak-nacos-provide的配置文件的后缀
        file-extension: yaml
        ## nacos配置中心服务的地址
        server-addr: localhost:8848
      ##配置服务发现地址,和配置中心地址区别开来
      discovery:
        server-addr: localhost:8848

打开nacos服务的客户端,在配置管理页面,点击右侧加号,新建 ak-nacos-provide.yaml配置文件,如下图所示:
在这里插入图片描述
配置格式要与项目中 spring.cloud.nacos.config.file-extension一致,建议配置信息在项目中通过提示输出后复制到此处,确保配置正确,编辑完点击发布,即可在配置管理中查看该配置。

新建测试类,测试是否可以拿到配置信息:

@RefreshScope//动态获取并实时刷新配置,必须在每一个可能刷新Bean的类加上该注解
@RestController
@RequestMapping("test")
public class TestController {
    @Autowired
    private ConfigurableApplicationContext ctx;

    @Value("${url_address}")
    private String urlAddress;

    @Value("${data.url}")
    private String dataUrl;

    private Logger log  = LoggerFactory.getLogger(this.getClass());

	//直接通过ConfigurableApplicationContext获取配置信息
    @RequestMapping(value = "/test/{id}",method = RequestMethod.POST)
    public String getMsg(@PathVariable Integer id) {
        return "msg "+ id + " >> " + ctx.getEnvironment().getProperty("server.port");
    }

    @RequestMapping(value = "getConfigInfo",method = RequestMethod.POST)
    public String getConfigInfo(){
        log.info("服务调用!-------------------------");
        return urlAddress + " >> " +serverPort+" >> "+dataUrl;
    }
}

测试结果如下,可以成功拿到配置信息:
在这里插入图片描述
打开nacos客户端中的服务管理–服务列表,即可查看到注册的服务信息
在这里插入图片描述

4.2、服务消费者—多项目共享配置、服务注册与发现、feign客户端调用简介

新建服务提供者nacos_consume,鼠标右键父项目,maven,Reimport,刷新maven依赖;

启动类配置:

@EnableSwagger2 //swagger文档配置,有兴趣的自行查阅学习
@EnableDiscoveryClient  //核心,代表自己是一个客户端
//代表开启feign客户端调用,value表示客户端接口所在包
@EnableFeignClients(value = "com.akproject.nacosconsume.feign")
@SpringBootApplication

添加配置文件bootstrap.yml(一定是bootstrap.yml文件,不是application.yml文件),内容如下:

server:
  port: 9992
spring:
  application:
    ##服务实例名称以及配置文件id
    name: ak-nacos-consume
  cloud:
    nacos:
      config:
        ##配置文件后缀
        file-extension: yaml
        ##配置中心服务的地址
        server-addr: localhost:8848
        ##指定共享配置的dataId,多个文件用,隔开
        ##该方式只能获取同一 组名 下的配置信息
        shared-configs: enjoyConfig.yaml
        ##指定共享配置文件,支持自动刷新
        refreshable-dataids: enjoyConfig.yaml

        ##实现不同组别中的配置文件共享
        ext-config:
          ##  - 表示可以添加多个不同组下的配置文件
          - data-id: enjoyConfigOtherGroup.yaml
            group: OtherGroup
            refresh: true
        ##自动刷新
        refresh-enabled: true
      ##服务注册地址
      discovery:
        server-addr: localhost:8848


##此配置表述输出feign包调用时的日志
logging:
  level:
    com.akproject.nacosconsume.feign: debug

##配置feign调用使用okhttp
feign:
  ##禁用httpclient
  httpclient:
    enable: false
  ##配置使用okhttp
  okhttp:
    enable: true
    ##Feign压缩配置,压缩数据,减少通信中的性能损耗,默认是禁止的
  compression:
    request:
      ##启用压缩
      enable: true
      ##压缩的类型
      mime-types: text/xml,application/xml,application/json
      ##最小压缩值的标准
      min-request-size: 2048
    ##启用压缩
    response: true

feign配置类:

@Configuration
public class FeignConfiguration {
    
    /**
     * 日志配置
     * @return
     */
    @Bean
    Logger.Level frignLoggerLevel(){

        //NONE,    不输出日志
        //BASIC,   只输出请求方法的URL和响应的状态码以及接口执行的时间
        //HEADERS, 将BASIC信息和请求头信息输出
        //FULL;    输出完整的请求信息
        return Logger.Level.FULL;
    }

    /**
     * Feign配置超时时间配置
     */
    @Bean
    public Request.Options options(){
        // 第一个参数:配置连接超时时间 默认是10 * 1000
        // 第二个参数:读取超时时间 默认是 60 * 1000
        return new Request.Options(5000,10000);
    }

}

feign客户端:

//value          代表服务实例信息,即就是Data Id
//path           代表该服务对应的controller的RequestMapping地址,包括contextPath路径
//configuration  日志配置类
@FeignClient(value = "ak-nacos-provide",
			 path = "/provide/test",
			 configuration = FeignConfiguration.class)
public interface NacosConsumeFeign {
    @RequestMapping(value = "getConfigInfo",method = RequestMethod.POST)
    public String getConfigInfo();
}

编辑测试类,通过feign调用,结果如下:

@RefreshScope//动态获取并实时刷新配置,必须在每一个可能刷新Bean的类加上该注解
@RestController
@RequestMapping("testGetServiceInfo")
public class TestGetServiceInfoController {
    @Autowired
    private NacosConsumeFeign nacosConsumeFeign;

    /**
     * 获取服务提供者的信息
     *
     * @return
     */
    @RequestMapping(value = "getConfigInfoFromProvideUseFeign", method = RequestMethod.POST)
    public String getConfigInfoFromProvideUseFeign() {
        return consumeUrl + "获取服务提供数据通过Feign:" + nacosConsumeFeign.getConfigInfo();
    }
}


配置共享:
请参考上面bootstrap.yml文件的共享配置说明
1> 新建enjoyConfig.yaml配置
2> 新建OtherGroup组名下的enjoyConfigOtherGroup.yaml配置

在这里插入图片描述
测试:

package com.akproject.nacosconsume.controller;


import com.akproject.nacosconsume.feign.NacosConsumeFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RefreshScope//动态获取并实时刷新配置,必须在每一个可能刷新Bean的类加上该注解
@RestController
@RequestMapping("testGetServiceInfo")
public class TestGetServiceInfoController {

    @Value("${consume.url}")
    private String consumeUrl;

    //这个是同一组名下共享配置中的属性
    @Value("${dataStr}")
    private String dataStr;

    /**
     * 获取共享配置信息
     *
     * @return
     */
    @RequestMapping(value = "getConfigInfoFromEnjoy", method = RequestMethod.POST)
    public String getConfigInfoFromEnjoy() {
        return "获取共享配置信息:" + dataStr;
    }


    //这个是不同组名下共享配置中的属性
    @Value("${enjoyConfigOtherGroup}")
    private String enjoyConfigOtherGroup;

    //获取application.yml文件下的属性
   @Value("${testData}")
    private String testData;
    /**
     * 获取不同组名下共享配置信息
     *
     * @return
     */
    @RequestMapping(value = "getConfigInfoFromEnjoyOtherGroup", method = RequestMethod.POST)
    public String getConfigInfoFromEnjoyOtherGroup() {
        return "获取共享配置信息:" + enjoyConfigOtherGroup + " >> " +testData;
    }
}

请自行测试。。。

4.3、说明
通过@Value注解将nacos配置中心中的配置信息注入的类,都要在类上加@RefreshScope,其作用是:动态获取并实时刷新配置,修改配置信息后不用重启项目即可获取最新配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值