04_Nacos注册中心

目录

一、认识和安装Nacos

1.1 Nacos基本概念

1.2 Nacos的启动

二、整合Nacos

1)引入依赖

2)配置nacos地址

3)访问

三、服务分级存储模型

1.1 集群基本概念

1.2 配置集群

1.3 同集群优先负载均衡

1)配置集群信息

2)修改负载均衡规则

四、权重配置

五、环境隔离

5.1 创建namespace

5.2 给微服务配置namespace

六、Nacos与Eureka的区别


一、认识和安装Nacos

1.1 Nacos基本概念

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

1.2 Nacos的启动

在nacos/bin目录中,输入命令启动Nacos:

startup.cmd -m standalone

二、整合Nacos

Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。

主要差异在于:

  • 依赖不同
  • 服务地址不同

1)引入依赖

在父工程的pom文件中的<dependencyManagement>中引入SpringCloudAlibaba的依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

然后在user-service和order-service中的pom文件中引入nacos-discovery依赖:

<!-- nacos客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

注意:不要忘了注释掉eureka的依赖。

2)配置nacos地址

在user-service和order-service的application.yml中添加nacos地址:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848

注意:不要忘了注释掉eureka的地址

3)访问

在浏览器输入地址:http://127.0.0.1:8848/nacos

三、服务分级存储模型

1.1 集群基本概念

一个服务可以有多个实例,nacos将N个实例划分成一个集群,每个集群下可以有多个实例,形成分级模型,如图:

微服务访问时尽可能访问同集群实例,因为本地访问速度快。当本集群不可用时才访问其他集群(消费者日志有warning提醒)

1.2 配置集群

修改user-service的application.yml文件,添加集群配置:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 集群名称

我们再次复制一个user-service启动配置,添加属性:

-Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH

1.3 同集群优先负载均衡

默认的ZoneAvoidanceRule并不能实现根据同集群优先来实现负载均衡。

因此Nacos中提供了一个NacosRule的实现,可以优先从同集群中挑选实例。

1)配置集群信息

修改application.yml文件,添加集群配置:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 集群名称

2)修改负载均衡规则

修改order-service的application.yml文件,修改负载均衡规则:

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

四、权重配置

实际部署中会出现这样的场景:

服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。

但默认情况下NacosRule是同集群内随机挑选,不会考虑机器的性能问题。

因此,Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。

在nacos控制台,找到user-service的实例列表,点击编辑,即可修改权重:

注意:如果权重修改为0,则该实例永远不会被访问

五、环境隔离

Nacos提供了namespace来实现环境隔离功能。

  • nacos中可以有多个namespace
  • namespace下可以有group、service等
  • 不同namespace之间相互隔离,例如不同namespace的服务互相不可见

5.1 创建namespace

默认情况下,所有service、data、group都在同一个namespace,名为public。我们可以点击页面新增按钮,添加一个新建命名空间(namespace):

5.2 给微服务配置namespace

给微服务配置namespace只能通过修改配置来实现。

例如,修改order-service的application.yml文件:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID

当访问不同namespace,会导致找不到服务,控制台会报错

六、Nacos与Eureka的区别

Nacos的服务实例分为两种类型:

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

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

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 设置为非临时实例

acos和Eureka整体结构类似,服务注册、服务拉取、心跳等待,但是也存在一些差异:

  • Nacos与eureka的共同点
    • 都支持服务注册和服务拉取
    • 都支持服务提供者心跳方式做健康检测
  • Nacos与Eureka的区别
    • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
    • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
    • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
    • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
### 服务发现与配置管理使用教程 #### 服务发现 Nacos 提供了强大的服务发现功能,支持多种服务注册与发现协议,包括 DNS、HTTP 和 RPC。通过 Nacos,开发者可以轻松实现服务的注册、发现和调用。 要开始使用 Nacos 进行服务发现,首先需要安装并启动 Nacos 服务。可以从 Nacos 的官方文档下载并按照指导安装 Nacos [^2]。安装完成后,可以通过以下步骤注册服务到 Nacos: 1. 在 Spring Boot 项目中添加 Nacos 服务发现的依赖,例如 `spring-cloud-starter-alibaba-nacos-discovery` [^4]。 2. 在 `application.yml` 或 `application.properties` 文件中配置 Nacos 服务器的地址。 3. 启动应用,服务将自动注册到 Nacos 中。 服务发现的实现可以通过 Feign 或 RestTemplate 来完成。Feign 是一个声明式的 Web 服务客户端,它使得编写 Web 服务客户端变得更加简单。使用 Feign 可以直接通过接口和注解来调用 Web 服务。 ```java @FeignClient(name = "service-provider") public interface ServiceClient { @GetMapping("/api") String callApi(); } ``` #### 配置管理 Nacos 的配置管理功能允许开发者动态地更新和获取配置信息,而无需重启服务。这意味着可以在不重新部署应用的情况下更改应用的行为。 要使用 Nacos 进行配置管理,需要在 Nacos 控制台创建配置文件,并通过 API 或 SDK 获取配置。在 Spring Boot 应用中,可以通过添加 `spring-cloud-starter-alibaba-nacos-config` 依赖来集成 Nacos 配置管理 [^4]。 ```yaml spring: cloud: nacos: config: server-addr: 127.0.0.1:8848 extension-configs: - data-id: user-service.properties group: DEFAULT_GROUP refresh: true ``` 以上配置指定了 Nacos 服务器的地址,并且指定了要加载的配置文件。当配置文件发生变化时,Nacos 会自动推送更新到应用,从而实现配置的热更新。 #### 动态配置服务 Nacos 支持配置版本管理,可以查看配置的历史版本,回滚到之前的版本,或者对比不同版本之间的差异。这有助于维护配置的一致性和可追溯性。 通过 Nacos 提供的 API,开发者可以发布配置,客户端则可以通过 API 获取配置 [^3]。 #### 服务融合 Nacos 还支持服务融合,这意味着它可以与其他服务框架无缝集成,如 Spring Cloud 和 Dubbo。这种融合使得开发者可以在不同的服务框架之间共享服务注册信息,从而简化了服务间的通信 [^1]。 #### 示例代码 下面是一个简单的示例,展示了如何使用 Nacos 进行服务发现: ```java @RestController public class ServiceController { @Autowired private ServiceClient serviceClient; @GetMapping("/call") public String callService() { return serviceClient.callApi(); } } ``` #### 相关问题 1. 如何在 Spring Boot 应用中集成 Nacos 服务发现? 2. 怎样利用 Nacos 实现配置的热更新? 3. Nacos 支持哪些服务发现协议? 4. 如何通过 Nacos 控制台管理配置文件? 5. 如何在 Nacos 中实现服务的健康检查?
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值