SpringCloudAlibaba系列【二】一文详解Nacos

目录

什么是Nacos

为什么要使用Nacos

Nacos主要功能

实战演练

技术小结


什么是Nacos

Nacos是阿里的一个开源产品,是用来实现微服务架构中服务注册、服务发现、配置管理的一套解决方案。本文就带大家来彻底学会如何使用Nacos以及它的一些细节。

为什么要使用Nacos

在早期微服务架构中,服务间的通讯是一般都是通过httpClient来完成,各个服务的ip等信息都是配置在彼此的配置文件中。如果某一个服务迁移或者添加或减少服务,那么所有与之通讯的服务都需要修改自己的配置文件,如果服务的数量很多,那么修改起来更是灾难。因此需要一个注册中心,所有服务启动时都向配置中心提交自己的ip和端口号等信息,或需要调用其他服务,则像注册中心获取信息。

     

最开始SpringCloud使用的是Eruka作为配置中心,由于Netflix停止了对Eruka的维护,并且Nacos的功能更胜Eruka一筹,因此现在主流都是用Nacos作为注册中心。

Nacos主要功能

在使用Nacos时有两个名词需要注意,一个是服务端,一个是客户端。服务端指的是Nacos服务本身。所有的微服务都是客户端。

  

1.服务注册:在每个客户端启动时,都会定时(5S)向服务端发送心跳请求,当服务端收到心跳请求后,判断是否是新服务,如果是,就保存到服务注册表中。如果不是,就更新该服务的心跳时间。若15S内没有收到某一个客户端的心跳,就将该客户端的健康状况改为不健康。如果30S内不健康的客户端还没有发送心跳,就会将该客户端从服务注册表中移除。

  

2.服务发现:客户端需要访问其他客户端时,就会去服务端拉取其他客户端的配置信息在本  地保存,同时会有一个任务来定时拉取更新服务端的配置信息。拉取时只会拉取状态为健康的服务信息。

  

3.配置管理:统一管理配置文件。假设我有一个支付服务并发量很高,我创建了10个实例来  缓解并发压力。这10个实例的配置会有很多公共的配置,如果要修改某一个配置需要把这10个实例的配置文件都修改一遍,非常麻烦。可以把这些公共的配置放在Nacos统一管理,修改配置只需要在Nacos修改一遍,所有的实例都会从Nacos拉取配置。

实战演练

一、下载Nacos客户端

     地址:Releases · alibaba/nacos · GitHub

    本文以windows环境下,2.03版本为例

        

二、下载完成后解压

运行bin目录下的startup.cmd启动Nacos服务端。

注意事项:

1.可以在cmd窗口使用 startup.cmd -m standalone执行,也可以双击startup.cmd执行,但是需要将startup.cmd脚本中的set MODE="cluter"设置为set MODE="standalone" 默认是集群启动,需要改为单机启动。

2.需要配置JAVA_HOME,也就是jdk的路径,否则启动失败。

  

三、登录Nacos服务端管理台

完成后登录http://localhost:8848/nacos,访问nacos 账号密码都是nacos

 四、客户端配置

  

  1.客户端连接Nacos服务端需要在pom文件引入下面两个包

        <!-- 服务发现(注册中心)-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- 服务配置(配置中心)-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

2.在SpringBoot启动类添加@EnableDiscoveryClient注解

@EnableDiscoveryClient
@SpringBootApplication
public class Application {

	public static void main(String[] args) {
	    SpringApplication.run(Application.class,args);
	}
}

3.配置文件,SpringCloudAlibaba项目一些配置需要读取bootstrap.properties文件,这是一个基本上只有在微服务项目里才会用到的配置文件,优先级大于application.properties。我们需要创建该文件并把SpringCloudAlibaba相关配置写在该文件中。

spring.application.name=payService
#服务发现
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.namespace=d9d3484a-f6c7-48b2-a84d-e36670b55844
#服务配置
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=d9d3484a-f6c7-48b2-a84d-e36670b55844
spring.cloud.nacos.config.file-extension=properties

其中

spring.application.name表示的是服务名

spring.cloud.nacos.discovery.server-addr表示的是服务发现服务端地址

spring.cloud.nacos.discovery.namespace表示的是服务发现命名空间id

spring.cloud.nacos.config.server-addr表示的是服务配置服务端地址

spring.cloud.nacos.config.namespace表示的是服务配置命名空间id

spring.cloud.nacos.config.file-extension表示的是Nacos配置文件的后缀名

  

命名空间起的是环境隔离的功能。一般我们可以设置不同的命名空间来实现dev、prod等环境的隔离。客户端只能获取相同命名空间下的其他客户端的信息,不能跨命名空间获取。可以在控制台的命名空间中添加。

配置文件中配置的是命名空间id,如果不配置,默认放在public下。

4.启动项目,就可以在服务管理-服务列表中的dev环境下看到我们的项目了。

5.获取Nacos配置文件,在Nacos服务端的配置管理-配置列表中,点击右上角的+号,就可以添加配置文件。配置文件也是分命名空间的,服务端只能获取相同命名空间下的配置文件。

其中

dataid 对应的是服务的配置文件,起名规则如下图所示。对于我们来说,命名空间已经起了环境隔离的作用,如果没有特殊要求,直接${prefix}.${file-extension}即可,本文案例中为payService.properties。file-extension在上面pom配置中配置。

 在代码中正常使用@Value获取Nacos配置即可。

    @Value("${test.say}")
    private String say;

注意:默认情况下Nacos配置文件修改,客户端的配置需要重启才能生效。如果需要立即生效,在使用配置的类上加@RefreshScope注解即可。

技术小结

至此Nacos对我们来说就可以熟练使用了,Nacos看起来简单其实细节非常多,有兴趣的小伙伴可以深入阅读源码研究一下。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值