注册、配置中心-Nacos(二)

目录

1.Nacos健康检查

1.1两种健康检查机制

客户端主动上报机制

服务器端反向探测机制

1.2Nacos服务实例类型

2.Nacos环境隔离

2.1创建Namespace

2.2测试远程调用

3.Nacos配置中心

3.1为什么需要配置中心

3.2快速上手

3.2.1添加配置

3.2.2获取配置

3.3配置中心详解

3.3.1设置命名空间

3.3.2Data Id

4.Nacos和Eureka的区别

1. 功能范围

2. 支持模式

3. 连接方式

4. 健康检查

5. 服务发现

6. 元数据管理

7. 部署和集成

8. 维护和更新


承接上文:注册、配置中心-Nacos(一)-CSDN博客

1.Nacos健康检查

1.1两种健康检查机制

Nacos作为注册中心,需要感知服务的健康状态,才能为服务调用方提供良好的服务

Nacos中提供了两种健康检查机制:

客户端主动上报机制

  • 客户端通过心跳上报方式告知服务端(Nacos注册中心)健康状态,默认新条件间隔5秒
  • Nacos会在超过15秒未收到心跳后将实例设置为不健康状态,超过30秒将实例删除

服务器端反向探测机制

  • Nacos主动探知客户端健康状态,默认间隔为20s
  • 健康检查失败后实例会被标记为不健康,不会被立即删除

比如领导管理员⼯的⼯作
1. 员工主动汇报: 员工每天主动汇报自己工作进度
2. 领导主动问询: 领导每周向员工了解工作进度

 Nacos中的健康检查机制不能主动设置,健康检查机制是和Nacos的服务实例类型强相关的

1.2Nacos服务实例类型

Nacos的服务实例(注册的节点)分为临时实例和非临时实例

  • 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认类型。
  • 非临时实例:如果实例宕机,不会从服务列表中剔除,也可以叫永久实例

对临时实例,采取的是客户端主动上报机制。

非临时实例,采取服务器端反向探测机制。

配置一个服务实例为永久实例

 spring:
  cloud:
   nacos:
    discovery:
     ephemeral: false # 设置为⾮临时实例
重启服务, 观察Nacos控制台

 停止服务, 再观察控制台:节点依然不会消失

 1.3常见问题

Nacos服务实例类型不允许改变

设置服务实例类型,重新启动Nacos可能会报错

报错信息参考

原因:Nacos会记录每个服务实例的IP和端口号,当发现IP和端口都没有发生变化时,Nacos不允许一个服务实例类型发生变化,比如从临时实例变成非临时实例

解决办法:

1.停掉Nacos

2.删除Nacos目录下/data/protocol/raft信息,里面会保存应用实例的元数据信息

2.Nacos环境隔离

企业开发中,一个服务会分为开发环境,测试环境和生产环境

  • 开发环境:开发人员用于开发的服务器,是最基础的环境.一般日志级别设置较低,可能会开启一些 调试信息。
  • 测试环境:测试人员用来进行测试的服务器,是开发环境到生产环境的过渡环境.
  • 生产环境:正式提供对外服务的环境,通常关掉调试信息

通常情况下,这几个环境不能互相通信

Nacos提供了namespace(命名空间)来实现环境的隔离.不同的namaspace的服务不可见.

2.1创建Namespace

默认情况下,所有的服务都在同一个namespace,名为public

点击左侧命名空间, 可以对namespace进行操作

 

新增命名空间

2.2配置namespace

namespace创建完成后,对服务进行配置

修改order-service的命名空间

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
            namespace: 0329e708-c889-45ab-820b-5271e8615ba7

2.2测试远程调用

1.启动服务,观察Nacos控制台

public命名空间下只有product-service服务

order-service在dev命名空间下

2.访问接口测试远程调用

发现服务报错:

3.修改product-service的其中⼀个实例, 命名空间改为dev后重新启动服务,再次访问接口
 
远程调用成功!

3.Nacos配置中心

除了注册中心和负载均衡之外,Nacos还是一个配置中心,具备配置管理的功能

Namespace的常用场景之一是不同环境的配置区分隔离,例如开发测试生产环境的配置隔离

3.1为什么需要配置中心

当前项目的配置都在代码中,会存在以下问题:

  1. 配置文件修改时,服务需要重新部署,为服务架构中,一个服务可能有成百个实例,挨个部署比较麻烦且容易出错
  2. 多人开发时,配置文件可能需要经常修改,使用同一个配置文件容易冲突

 配置中心就是对这些配置项进行统⼀管理. 通过配置中心, 可以集中查看, 修改和删除配置, 无需再逐个修改配置文件. 提⾼效率的同时, 也降低了出错的风险.

1.服务启动时,从配置中心读取配置项的内容,进行初始化

2.配置项修改时,通知微服务,实现配置的更新加载

3.2快速上手

参考文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

3.2.1添加配置

在Nacos控制台添加配置项

注意: 配置管理的命名空间和服务列表的命名空间是隔离的, 两个是分别设置的. 默认是public
也就是服务管理命名空间配置 ≠ 配置管理的命名空间

新建配置项

注意:

  1. Data ID设置为项目名称
  2. 配置内容的数据格式,目前只支持properties和yaml类型
  3. 设置配置内容

3.2.2获取配置

1.引入Nacos Config依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- SpringCloud 2020.*之后版本需要引⼊bootstrap-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

2.配置bootstrap.properties

微服务启动前,需要先获取nacos中配置,并与application.yml配置合并,在微服务运行之前,Nacos要求必须使用bootstrap.properties配置文件来配置Nacos Server的地址

 spring.application.name=product-service
 spring.cloud.nacos.config.server-addr=110.41.51.65:10020

或者使用bootstrap.yml

 spring:
  application:
   name: product-service
  cloud:
   nacos:
    config:
     server-addr: 127.0.0.1:10020

spring.application.name需要和nacos配置管理的Data ID一致

spring.cloud.nacos.config.server-addr为Nacos Server的地址

3.编写程序

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.RestController;

@RefreshScope
@RestController
public class NacosController {
    @Value("${nacos.config}")
    private String nacosConfg;

    @RequestMapping("/getConfig")
    public String getConfig(){
        return "从Nacos获取配置项nacos.config:"+nacosConfg;
    }
}

@Value读取配置

@RefreshScope配置进行热更新

4.测试

启动程序访问接口:http://127.0.0.1:9090/getConfig

 

在Nacos控制台修改nacos.config

再次访问接口:

3.3配置中心详解

3.3.1设置命名空间

Nacos配置管理的命名空间和服务列表的命名空间是分别设置的,默认是public

Nacos命名空间配置依然在bootstrap.properties中进行配置

spring.cloud.nacos.config.namespace=51152a13-7911-49e3-bbdc-16fd5670a257

对应bootstrap.yml配置

spring:
  application:
    name: product-service
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        namespace: b460e95c-d4b9-42a3-810f-cdf0051ce008   #配置中心的命名空间

value对应命名空间的ID,如下图所示:

如果设置命名空间后,项目启动时,会从该命名空间下找对应的配置项

重新访问接口,观察结果

3.3.2Data Id

Data Id格式介绍

在Nacos Spring Cloud中,dataId的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}

prefix默认为spring.application.name的值,可以通过配置项spring.cloud.nacos.config.prefix来配置

spring.profiles.active即为当前环境对应的profile.当spring.profiles.active 为空时,对应的连接符-也将不存在,datald的拼接格式变成${prefix}.${file- extension}

file-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置。目前只支持properties和yaml类型.默认为properties

${spring.application.name}, ${spring.profiles.active} 等通过配置文件来指定时, 必须放在
bootstrap.properties 文件中

在bootstrap.yml中添加spring.profiles.active值

spring:
  profiles:
    active: dev

启动服务,观察日志

三个文件的优先级为:
product-service-dev.properties > product-service.properties > product-service

4.Nacos和Eureka的区别

Nacos和Eureka都是服务注册与发现的工具,它们在微服务架构中扮演着重要的角色。然而,两者在多个方面存在显著的差异,以下是对这些差异的详细分析:

1. 功能范围

  • Nacos:不仅提供了服务注册与发现的功能,还集成了配置管理、动态DNS服务等功能。它旨在帮助开发者构建弹性、高可用性的微服务架构。
  • Eureka:主要关注于服务注册与发现,通过RESTful API实现服务实例的注册和发现,并具备自我保护机制。Eureka虽然不直接提供配置管理功能,但通常可以与其他配置中心(如Spring Cloud Config)配合使用。

2. 支持模式

  • Nacos:支持CP(一致性)和AP(可用性)两种模式。它可以根据业务需求在一致性和可用性之间做出选择,当集群中存在非临时实例时,默认采用CP模式。
  • Eureka:只支持AP模式,即更倾向于保证系统的可用性。当注册中心出现问题时,客户端仍然可以基于缓存中的信息进行服务调用。

3. 连接方式

  • Nacos:使用Netty进行长连接通信,这意味着Nacos与服务之间保持持久的连接,能够更快地响应服务状态的变化。
  • Eureka:使用短连接,客户端定时向注册中心发送心跳信息以维持连接。这种方式可能不如长连接响应迅速,但在某些场景下可能更为适合。

4. 健康检查

  • Nacos:对临时实例采用心跳模式检测,对永久实例则采用主动请求来检测。这种机制能够更准确地判断实例的健康状态。
  • Eureka:只支持基于HTTP的心跳模式健康检查,客户端定时向注册中心发送请求以表明自己仍然存活。

5. 服务发现

  • Nacos:支持定时拉取和订阅推送两种模式。注册中心每次服务列表变化都会实时推送给订阅者,确保数据的及时性。
  • Eureka:基于拉模式进行服务发现,客户端定时从注册中心拉取服务列表信息。这种方式可能导致数据存在一定的延迟。

6. 元数据管理

  • Nacos:提供了丰富的元数据支持,包括服务分类、权重、健康状态等信息,有助于实现更细粒度的服务管理和路由策略。
  • Eureka:元数据信息相对简单,主要包括服务名、IP地址和端口号等基本信息。

7. 部署和集成

  • Nacos:部署相对复杂,但提供了统一的配置管理平台,可以集中管理各个应用程序的配置信息。它支持多种服务注册和发现方式,如DNS、HTTP和API等。
  • Eureka:部署较为简单,与Spring Cloud深度集成,开箱即用。但配置管理功能较弱,通常需要与其他组件配合使用。

8. 维护和更新

  • Nacos:仍在不断更新和维护中,提供了更多的功能和改进。
  • Eureka:虽然曾经是Netflix微服务架构中的重要组件,但现在已经不再维护。这意味着在未来可能无法获得官方的技术支持和更新。

综上所述,Nacos和Eureka在功能范围、支持模式、连接方式、健康检查、服务发现、元数据管理、部署和集成以及维护和更新等方面都存在显著的差异。选择使用哪个工具取决于具体的业务需求和技术架构。对于需要更全面的服务治理和配置管理功能的场景,Nacos可能是一个更好的选择;而对于简单的服务注册与发现需求,Eureka则可能更为适合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值