nacos

本文介绍了Nacos的安装启动步骤,包括解压、配置端口和命令行启动。接着讲解了如何将服务注册到Nacos,涉及SpringCloudAlibaba依赖的引入和配置文件设置。还讨论了服务的集群存储模型、权重配置、命名空间(环境隔离)以及Nacos作为注册中心的特点。此外,文章还涵盖了统一配置管理和配置的热更新,强调了配置的优先级和共享机制。
摘要由CSDN通过智能技术生成

一、nacos安装启动

1,解压到英文目录

2,在配置文件选择一个合适的端口

在这里插入图片描述

3,在cmd命令行启动

startup.cmd -m standalone

在这里插入图片描述

二、服务注册到nacos

1,导入依赖

  • 1,在父工程的pom.xml文件的<dependencyManagement>导入SpringCloudAlibaba的管理依赖

    <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>
    
  • 2,在服务的pom.xml文件中引入nacos-discovery依赖

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

eureka与nacos依赖只能存在一个

2,配置nacos地址

  • 在yml文件配置

    • 在服务端添加nacos地址
    spring:
      cloud:
        nacos:
          server-addr: localhost:8848 # nacos注册中心的ip与端口(地址)
    
    • 也可以使用下面的

    • 加了discovery表示这是一个注册

      因为nacos即可以做注册中心也可以做配置中心

      但是上下的效果是一样的

    # 需要服务名称
    spring:
      application:
        name: weatherservice
      cloud:
        nacos:
          discovery: # 加了discovery与上面效果一样
            server-addr: localhost:8848
    

3,注解(可不要)

与eureka注解一样 @EnableDiscoveryClient

三,服务分级存储模型

1,why?

一般,服务会直接访问实例。但是随着实例越来越多,为了方便管理,会将服务分到不同的集群中。

2,好处

1,安全:我们可以将服务分到不同的地域,如杭州与上海,当一个地方出了问题,

​ 另一个地方依然可以使用

2,快速:我们希望服务消费者可以优先访问距离更近的服务。相同集群的服务会优先访问,

​ 相同集群没有才会访问别的集群

3,分级模型

在这里插入图片描述

4,给服务配置集群

  • 在服务的yml配置文件配置 - 【cluster-name】

  • 集群名称相同的服务会放在同一个集群

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

四、nacos权重配置

1,why?

​ 因为不同的服务器性能有差异,所以我们我们希望性能好的服务器能够承担更多的访问。

但是默认情况下,NacosRule是集群优先但是同集群随机挑选服务器

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

2,设置权重

权重一般在0-1之间,权重越大被访问的频率就越高,权重为0则不被访问

在这里插入图片描述

五、命名空间(环境隔离)

1,创建命名空间

会自动生成命名空间的id(很重要)

在这里插入图片描述

2,配置服务的命名空间

在yml文件配置相关内容

spring:
cloud:
nacos:
discovery:
namespace: 9cdecb08-b35c-4619-a710-0d8243a8d760 # 开发环境id
group: usergroup # 配置分组,不同组的也不能相互访问

3,注意

命名空间不同的两个服务是不能相互访问的。

同一个命名空间但是不同分组,也不能相互访问

命名空间需要在nacos里面创建获取对应的id,但分组可以直接给分组名

六、nacos注册中心分析

在这里插入图片描述

  • 1,nacos的实例分为临时实例与非临时实例
  • 临时实例:如Eureka一样,采用心跳监控。一旦不健康就会被剔除
  • 非临时实例:nacos会主动询问。即便不健康也会被保留。
  • 2,nacos会主动向服务消费者推送消息,当服务注册信息有变动时会主动推送新的注册信息。
  • 3,Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

1,配置临时实例

nacos默认为临时实例

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

七、统一配置管理

1,why?

当微服务集群配置的实例越来越多,达到数十甚至数百的时候,如果要一个个的更改每一个

微服务的配置,显得很憨。

我们希望能够有一个统一的配置,能够集中管理所以微服务的配置。

正好,nacos就可以做到。

但是建议不要将所有的配置都放在nacos里面,应该将需要频繁变动的配置放在nacos里面,

对于向数据库连接池这样一般不变的配置放在本地就可以了。

2,在nacos中添加配置文件

  • 1,

在这里插入图片描述

  • 2,

在这里插入图片描述

3,如何拉取nacos中的配置

  • 1,原理

    微服务需要先拉取nacos中的配置,然后读取application.yml文件的配置,二者合并后开始创建项目。

    但是,拉取nacos的配置需要nacos服务的地址,但是nacos服务的地址在application.yml中,所以就很尴尬!

    因此,出现了名为bootstrap.yml的配置文件,这个配置文件会在application.yml之前执行,在这个配置

    文件配置nacos的地址信息,就可以解决上面的问题。

在这里插入图片描述

3.1,引入nacos-config依赖
<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
3.2,添加bootstrap.yaml

注意上面在nacos添加配置文件时,文件的名称【userservice-dev.yaml】。

其实配置文件就是通过【服务名称 + " - " + 开发环境 + " . " + 文件后缀名】

在通过【Nacos地址】来寻找需要的配置文件的。

在这里插入图片描述

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

@Value(“${pattern.dateformat}”)
private String dateformat;

@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));
    }
    // ...略
}

八、配置的热更新

@ConfigurationProperties会自动热更新,@Value注入的变量所在类上添加注解@RefreshScope

1,方法一

  • @RefreshScope

    在@Value注入的变量所在类上添加注解@RefreshScope

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GZ9aGcnO-1683896240777)(05-Nacos.assets/image-20230512204240306.png)]

2,方法二(推荐)

  • @ConfigurationProperties

推荐,因为可以自动热更新。

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

九、共享配置

其实微服务启动时,会去nacos读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml

  • [spring.application.name].yaml,例如:userservice.yaml

[spring.application.name].yaml不包含环境,因此可以被多个环境共享。

1,配置共享的优先级

nacos的配置优先于本地的配置

nacos的配置中,当前服务配置大于共享配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值