Nacos

命名空间#

image-20230306215920179

1.Nacos 简介#

官网: https://nacos.io/zh-cn/

Nacos 致力于发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速

实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心

的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

2.Nacos 的核心概念#

image-20230306220153927

2.1 服务 (Service)#

服务是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客

户端可以为不同的目的重用(例如通过跨进程的网络调用)。Nacos 支持主流的服务生态,

如 Kubernetes Service 、 gRPC|Dubbo RPC Service 或 者 Spring Cloud RESTful

Service.

2.2 服务注册中心 (Service Registry)#

服务注册中心,它是服务实例及元数据的数据库。服务实例在启动时注册到服务注册表,并在

关闭时注销。服务和路由器的客户端查询服务注册表以查找服务的可用实例。服务注册中心可

能会调用服务实例的健康检查 API 来验证它是否能够处理请求。

2.3 服务元数据 (Service Metadata)#

服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规

则、安全策略等描述服务的数据

2.4 服务提供方 (Service Provider)#

是指提供可复用和可调用服务的应用方

2.5 服务消费方 (Service Consumer)#

是指会发起对某个服务调用的应用方

2.6 配置 (Configuration)---****配置文件中心#

在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立

的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地

和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者

运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。

2.7 配置管理 (Configuration Management)#

在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等

所有与配置相关的活动统称为配置管理。

2.8 名字服务 (Naming Service)#

提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管

理服务,例如 ServiceName -> Endpoints Info, Distributed Lock Name -> Lock

Owner/Status Info, DNS Domain Name -> IP List, 服务发现和 DNS 就是名字服务的

2大场景

2.9 配置服务 (Configuration Service)#

在服务或者应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者。

3.NacosServer 的安装和启动#

NacosServer 相当于 EurekaServer,只不过 eurekaServer 使我们自己搭建的一个项目,

而 NacosServer 别人已经提供好了

3.1 NacosServer 的下载#

我们要对应版本,目前 alibaba 稳定版是 2.2.6.RELEASE

在上一节中了解了版本对应关系,alibaba 2.2.6.RELEASE 对应的 nacos 版本为 1.4.2

3.2 解压以及目录说明#

image-20230306220403061

3.3 修改配置文件【重点】#

进入${Nacos}/conf 目录里面,使用文件编辑器打开 application.properties 文件,这里

面我使用的是 Nodepad++:

Nacos 默认使用嵌入式数据库实现数据的存储,并不方便观察数据存储的基本情况,这里面

我们修改为使用 Mysql 数据库做数据的存储,方便我们观察数据的结构。

在配置文件末尾添加如下配置

spring.datasource.platform=mysql

db.num=1

db.url.0=jdbc:mysql://**localhost:3306/nacos**?characterEncoding=utf8&connectTimeout=1

000&socketTimeout=3000&autoReconnect=true

db.user=**root**

db.password=**123456**

注意:上面的 url 地址是我的服务器地址,你们的就填写自己的地址。

3.4 Mysql 表的导入#

在 config 目录下找到对应的 sql 脚本,提示:Nacos 建议使用 5.7 的 Mysql 数据库,版本

较低或者较高可能存储兼容性问题

我使用的 Mysql 数据库版本为 5.7

image-20230306220511900

image-20230306220519619

3.5 NacosServer 的启动、

可以直接 startup.cmd -m standalone 启动单击版本

上面工作都完成后,现在我们来启动一个单机版的 Nacos 服务器。

进入到${Nacos}/bin 目录里面:

image-20230306220537400

image-20230306220546890

双击 startup.cmd 文件,完成 nacosServer 的启动。

http://localhost:8848/nacos ,即可访问启动 Nacos 实例。

Nacos 默认用户名和密码都是 nacos

如果想修改密码,可以直接修改数据库的 user 表,密码可以使用 BcryptPasswordEncoder

加密

输入正确的用户名和密码提交后,出现 Nacos 的控制台界面

4.使用 Nacos 做注册中心#

4.2 版本依赖【重点再贴图一次】#

image-20230306232119951

4.3 创建两个项目,选择依赖#

start.aliyun.com

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.powernode</groupId>
    <artifactId>nacos-client-b</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>02-nacos-client-b</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
        <spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <dependencies>
    	 <!-- 导入了spring-boot-starter-web依赖,由于spring cloud是基于springboot的,所以此依赖必须要有-->
        <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-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

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

</project>

4.4 application.yml#

两个配置文件基本一致,注意端口和应用名称:

server:
    port: 8081
spring:
    application:
        name: nacos-client-b
    cloud:
        nacos:
            server-addr: localhost:8848
            username: nacos
            password: nacos
            discovery:  # 这里是和注册相关的配置
                namespace: dbd434aa-4547-4348-8bf1-32a896ca241d
                group: A_GROUP # 往哪个组注册
                service: user-service  # 这个才是注册列表的名字 如果不写 默认是取${spring.application.name}

4.5 修改两个启动类#

@EnableDiscoveryClient //开启服务发现客户端 也就是 nacosServer 的客户端

4.6 服务发现详解#

只能找到 同一个命名空间下的同一个组:

    @Autowired
    public DiscoveryClient discoveryClient; //提供的服务发现

   
    @GetMapping("test")
    public String test() {
        List<ServiceInstance> instances = discoveryClient.getInstances("user-service");
        System.out.println(instances);
        return "ok";
    }

5.集成 openfeign 做远程调用和负载均衡#

跟之前是一样的:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

6.Nacos Discovery 对外暴露 Endpoint#

Nacos Discovery 内 部 提 供 了 一 个

Endpoint, 对 应 的

endpoint id 为

nacos-discovery。我们通过该 Endpoint,能获取到:

 当前服务有哪些服务订阅者 ;

 当前应用 Nacos 的基础配置信息 ;

6.1 给任意项目添加依赖#

假设我们想看消费者的一些信息,我们给消费者添加

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

6.2 修改配置文件#

Endpoint 本身对外界隐藏显示,我们需要在配置里面开启对 Endponit 的显示支持。

修改 application.yml 配置文件,在里面添加如下的配置

management:
  endpoints:
    web:
      exposure:
        include: '*'  # 暴露所有的监控端点 # 如果一个服务需要被监控 那么就要讲自身的一些情况(一些信息接口)暴露出去
        
   

说明:

 exposure.include:对外界保留那些 Endpoint,若是所有则使用* ;

6.3 启动项目访问查看效果#

http://localhost:8001/actuator

http://localhost:8001/actuator/nacosdiscovery

image-20230307125339659

7.Nacos Discovery Starter更多的配置项#

image-20230307192000763

image-20230307192011283

8.nacos 集群设置#

修改nacos项目下的conf目录下面的: cluster.conf


#it is ip  nacos 2.x 端口需要间隔一个 端口号
#example
192.168.16.101:8848
192.168.16.102:8850
192.168.16.103:8852

nacos-client 的配置文件:

spring:
    application:
        name: nacos-client-b
    cloud:
        nacos:
            server-addr: localhost:8848,localhost:8850

作者:Esofar

出处:https://www.cnblogs.com/firsthelloworld/p/17439903.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   我不想学编丿程  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示