nacos的使用

文章详细介绍了Nacos的基本使用,包括引入依赖、配置Nacos地址。讨论了命名空间的环境隔离功能,Nacos与Eureka的区别,特别是服务实例类型的差异。接着阐述了Nacos的分级存储模型,集群搭建,负载均衡的配置以及服务实例权重的设定。此外,还详细讲解了Nacos的配置管理,包括配置的热更新和配置共享机制。

目录

 一.nacos的基本使用

1.引入依赖

2.bootstrap.yaml配置nacos地址

二、nacos的命名空间(环境隔离)

 三、nacos和eureka的区别

 四、nacos的分级存储模型

服务集群的搭建

 集群的负载均衡

服务用例的权重配置

五、nacos的配置管理

操作流程

 nacos的热更新实现

nacos的配置共享


 一.nacos的基本使用

1.引入依赖

总工程依赖

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

子服务依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.bootstrap.yaml配置nacos地址

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

二、nacos的命名空间(环境隔离)

一、指的是nacos可以创建不同的空间隔离管理启动的服务,不同空间的服务是不能相互访问的,这种空间就是命名空间

二、命名空间的创建

 

将服务放在指定所在命名空间:

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

 三、nacos和eureka的区别

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

  • 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。

  • 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

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

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

 nacos服务流程图:

  • Nacos与eureka的共同点

    • 都支持服务注册和服务拉取

    • 都支持服务提供者心跳方式做健康检测

  • Nacos与Eureka的区别

    • Nacos支持主动检测服务健康状态,而Eurake只能等待监听服务心跳,在nacos中临时实例采用心跳模式,非临时实例采用naocs主动检测模式

    • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除

    • Nacos支持服务列表变更主动推送服务列表,服务列表更新更加及时

 四、nacos的分级存储模型

首先引入三个概念:服务,集群,实例

  1. 服务:比如一个系统中的用户服务为一个服务,订单服务为一个服务,日志服务为一个服务
  2. 集群:我们一个服务包含多个集群,如广州订单服务集群,上海订单服务集群,一般我们会按照机房来划分服务集群,一个机房的为一个集群
  3. 实例:一个服务集群下面会有多个实例,跑在一个机房里不同的机器或端口上

 微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。当本集群内不可用时,才访问其它集群。

集群的搭建

举例:给user-service配置集群

在userservice的bootstrap.yaml中配置

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

启动服务后,就可以在nacos上看到如下界面了

 集群的负载均衡

 当我们一个集群中有多个服务实例时,可配置负载均衡策略,根据策略优先选择需要使用的实例

 在nacos中,默认的均衡策略并不能让调用服务优先本集群内的被调用服务,我们需要在调用服务指定一个新策略才能实现:

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 优先选择本集群中服务

权重配置

由于一个集群中可能有的实例服务器性能较好,有的服务器性能差,这时我们就需要让性能更好的服务器承载更多的访问量,这是可以通过配置服务实例的权重来实现

权重越大则被访问几率越大,权重为零则永远不会访问

五、nacos的配置管理

nacos的配置管理和服务的配置拉取

Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新

操作流程

一、nacos端

注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。

二、服务端

1.引入nacos-config依赖

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

2.在bootstrap.yaml配置nacos上配置文件位置

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev 
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名

服务这边会根据

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}为id去nacos上找到匹配的配置文件

上面我们在nacos中配置了

 可直接使用@Value注解拉取注入值,和本地配置文件注入方式一样

package cn.itcast.user.web;

import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Value("${pattern.dateformat}")
    private String dateformat;
    
    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }
    // ...略
}

访问结果

 nacos的热更新实现

nacos热更新实现有两种方式

1.类上加@RefreshScope注解

2.或者使用@ConfigurationProperties代替@Vlue注入

package cn.itcast.user.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}




@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private PatternProperties patternProperties;

    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
    }

    // 略
}

nacos的配置共享

在nacos中而[spring.application.name].yaml由于不包含环境,因此可以被多个环境共享。

配置文件id这样命名的话就可以被多个环境服务拉取到了

注意:共享配置的优先级是低于专属配置的,如果有覆盖重复情况的话,总体来说配置的优先级为

专属服务配置>共享服务配置>本地服务配置

### 服务发现与配置管理使用教程 #### 服务发现 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 中实现服务的健康检查?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值