Nacos学习

Nacos

Nacos 简介

Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

核心特性:

  1. 服务发现: 支持 DNS 与 RPC 服务发现,也提供原生 SDK 、OpenAPI 等多种服务注册方式和 DNS、HTTP 与 API 等多种服务发现方式。
  2. 服务健康监测: Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。
  3. 动态配置服务: Nacos 提供配置统一管理功能,能够帮助我们将配置以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
  4. 动态 DNS 服务: Nacos 支持动态 DNS 服务权重路由,能够让我们很容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单 DNS 解析服务。
  5. 服务及其元数据管理: Nacos 支持从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

Nacos 启动

启动运行(windows)

standalone(单节点)

直接解压后在bin目录下启动
在这里插入图片描述
注意查看启动
在这里插入图片描述
启动成功后:默认账号/密码: nacos
在这里插入图片描述

cluster模式

测试环境,可以先用 standalone 模式撸起来,享受 coding 的快感,但是,生产环境可以使用 cluster 模式。

cluster 模式需要依赖 MySQL,然后改两个配置文件:

conf/cluster.conf
conf/application.properties

大致如下:

1: cluster.conf,填入要运行 Nacos Server 机器的 ip

192.168.100.155
192.168.100.156

2: 修改NACOS_PATH/conf/application.properties,加入 MySQL 配置

db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

创建一个名为nacos_config的 database,将NACOS_PATH/conf/nacos-mysql.sql中的表结构导入刚才创建的库中,这几张表的用途就自己研究吧

Nacos Server 的配置数据是存在哪里呢?

我们没有对 Nacos Server 做任何配置,那么数据只有两个位置可以存储:

  • 内存
  • 本地数据库

如果我们现在重启刚刚在运行的 Nacos Server,会发现刚才加的 nacos.properties 配置还在,说明不是内存存储的。
这时候我们打开NACOS_PATH/data,会发现里边有个derby-data目录,我们的配置数据现在就存储在这个库中。

Derby 是 Java 编写的数据库,属于 Apache 的一个开源项目

如果将数据源改为我们熟悉的 MySQL 呢?当然可以。

注意:不支持 MySQL 8.0 版本

这里有两个坑:

Nacos Server 的数据源是用 Derby 还是 MySQL 完全是由其运行模式决定的:

standalone 的话仅会使用 Derby,即使在 application.properties 里边配置 MySQL 也照样无视;
cluster 模式会自动使用 MySQL,这时候如果没有 MySQL 的配置,是会报错的。

测试demo项目结构

在这里插入图片描述

统一配置中心

所有渠道端可以读取放置在配置中心的配置文件;简单说:“抽取配置文件到nacos,然后服务(系统)只需要指定nacos所建配置文件的路径即可”
在这里插入图片描述

命名空间、分组、文件

命名空间下存在不同的分组,而在组之下就是配置文件(目录结构式管理–三者定位)
这样的服务获取配置文件就需要指定命名空间、分组、配置文件名

默认的命名空间:public(无空间ID)

  1. 新建-命名空间
    在这里插入图片描述
    切换不同空间
    在这里插入图片描述
  2. 新建-配置文件
    配置管理-配置列表-“+”
  • Data ID: 配置文件完整名
  • Group :分组名
  • 配置格式:选择需要的格式
  • 配置内容:配合文件内容
    在这里插入图片描述
新建bootstrap.properties文件

服务找到所需配置文件
bootstrap加载优先级高于application.yaml

spring.application.name=nacos_config_test
spring.cloud.nacos.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.group=DEFAULT_GROUP
# 如果不是在public空间下需要指定空间ID
#spring.cloud.nacos.config.namespace=71fa8cbc-535b-4ae1-9535-ec75d3807f0c
spring.cloud.nacos.config.name=nacos_config.properties
依赖

naocs-demo:

   <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
        <springboot.version>2.3.2.RELEASE</springboot.version>
        <springcloudalibaba.version>2.2.5.RELEASE</springcloudalibaba.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${springboot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${springcloudalibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

nacos_config_test:
配置中心依赖:

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

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

    </dependencies>
controller

RefreshScope 刷新
在这里插入图片描述

效果

在这里插入图片描述

配置中心多数据集

配置管理
在这里插入图片描述
bootstrap.properties

]spring.application.name=nacos_config_test
spring.cloud.nacos.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=71fa8cbc-535b-4ae1-9535-ec75d3807f0c

spring.cloud.nacos.config.extension-configs[0].data-id=myTest.yaml
spring.cloud.nacos.config.extension-configs[0].group=my_group
spring.cloud.nacos.config.extension-configs[0].refresh=true

spring.cloud.nacos.config.extension-configs[1].data-id=myTest.yaml
spring.cloud.nacos.config.extension-configs[1].group=test_group
spring.cloud.nacos.config.extension-configs[1].refresh=true

配置中心-配置列表(导入、导出、克隆)

字面意思

配置中心-历史版本

历史版本配置文件比较、回滚

配置中心-监听查询

查看不同机器所使用的配置文件

服务注册与发现

服务端

依赖

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

        <!--服务注册与发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
application配置文件

服务注册

  • 设置注册服务名
  • 设置所连接的nacos
server:
  port: 8085
  servlet:
    context-path: /
spring:
  application:
    name: nacos-store
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

启动类

服务发现:@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
public class NacosStore {
    public static void main(String[] args) {
        SpringApplication.run(NacosStore.class,args);
    }
}
对外提供的方法
@RestController
@RequestMapping("/store")
public class StoreController {

    @RequestMapping("/getInfo")
    public String  getInfo(@RequestParam("info") String info){
        return  "服务端被调用了:"+info;
    }
}

客户端

依赖
   <!-- 配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <!--服务注册与发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
application配置文件
server:
  port: 8081
  servlet:
    context-path: /
spring:
  application:
    name: nacos-order
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

启动类

服务发现:EnableDiscoveryClient
feign扫描:EnableFeignClients

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.xusx.feign")
public class NacosOrder {
    public static void main(String[] args) {
        SpringApplication.run(NacosOrder.class,args);
    }
interface 接口

在这里插入图片描述

@FeignClient(“nacos-store”):来自于注册的服务
在这里插入图片描述
@RequestMapping(“/store/getInfo”):来自于 服务提供对外方法的请求地址

@FeignClient("nacos-store")
public interface StoreFeiSercvice {
    @RequestMapping("/store/getInfo")
     String  getInfo(@RequestParam("info") String info);
}
controller

@Autowired 引入使用feign- interface

@RestController
@RequestMapping("/order")
public class NacosOrderController {

    @Autowired
    private StoreFeiSercvice storeFeiSercvice;

    @RequestMapping("/test")
    public String test(){
        return storeFeiSercvice.getInfo("xusx");
    }
}
调用测试:

在这里插入图片描述

负载

服务端(nacos-store)复制多份(注意端口别冲突了)
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值