Nacos作为注册中心和配置中心,爱不释手的感觉

Stella981
• 阅读 565

在使用SpringCloud做分布式微服务架构时,注册中心是必不可少的一个组件。目前可以用的主要有:Eureka、Consul、Zookeeper。今天,我们就来说一下Alibaba的Nacos怎么样?

下载与安装

  • 下载地址https://github.com/alibaba/nacos/releases

  • 安装:

  • Windows 下载解压后(.zip),直接点击bin/start.bat就可以了。

  • Linux下载解压后(.tar.gz),同样,也是运行 bin/start.sh 脚本。

  • 打开控制台:

    Nacos提供了一个可视化的操作平台,安装好之后,在浏览器中输入http://localhost:8848就可以访问了,默认的用户名和密码都是nacos(我使用的1.2.0版本。默认将密码验证给关了,这个选项后边会说)

    Nacos作为注册中心和配置中心,爱不释手的感觉

Nacos简介

Nacos是由阿里巴巴开源的一个好东西,直接贴上它的官网,就不再这么累赘了,毕竟是国人开发的,是有中文文档的,上边写的很全面。https://nacos.io/zh-cn/docs/quick-start.html

Nacos作为注册中心

它和Eureka不一样,并不需要创建新的web项目,而是和Zookeeper和Consul一样,只需要下载安装启动后,将我们的微服务注册进去就可以了。

创建两个微服务,一个客户端(调用者)和一个服务端(提供者),

  • 引入依赖

       com.alibaba.cloud   spring-cloud-starter-alibaba-nacos-discovery

  • 在它们的配置文件中引入如下代码:

    spring: cloud:  nacos:    discovery:     # Nacos的地址      server-addr: localhost:8848

  • 主启动类上添加(不管是哪种注册中心,这个一定要有):

    @EnableDiscoveryClient

  • 当然,在客户端还是要添加ribbon的负载均衡的,但是不用额外添加依赖,nacos已经添加了,我们只需要注入如下bean就可以

    @Configurationpublic class AppConfig {      @Bean   @LoadBalanced   public RestTemplate restTemplate(){       return new RestTemplate();  }}

  • 好了,打开Nacos的控制台,然后就可以看到这两个微服务了。

Nacos作为注册中心和配置中心,爱不释手的感觉

Nacos作为分布式配置中心

之前我们是使用SpringCloudConfig从github等仓库上拉取的配置文件,但是用了Nacos后,我们就可以从Nacos中直接配置了,是不是很方便啊。新建了一个项目,nacos-config-server-8002

pom.xml引入下边依赖

<!--分布式配置中心--><dependency>   <groupId>com.alibaba.cloud</groupId>   <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

application.yml中加入如下配置内容

spring: profiles:  active: dev

添加一个bootstrap.yml

server: port: 8002spring: application:  name: nacos-config-server-8002 cloud:  nacos:    discovery:      server-addr: localhost:8848    config:      server-addr: localhost:8848# 配置文件类型,有yaml和properties ,注意一定是yaml,不是yml      file-extension: yaml
  1. application.yml中的配置是什么意思?

        自行百度下SpringBoot配置不同环境的配置文件

  1. 为什么要引入bootstrap.yml?

简单来说,这个配置是和application.yml是一样的,不过它要比appliation.yml先加载

Controller中的接口

@RestController@RefreshScope //这是一个SpingCloud的原生注解,可以实现配置的动态刷新public class InfoController {   /*   这个中的 : 的意思就是说,如果配置文件中没有,就直接使用后边的那个字符串,我写的是nothing   在本地项目中,我们并没有配置configInfo,   所以如果这时候调用http://localhost:8002/info   返回就是nothing    */   @Value("${configInfo}")   private String configInfo;   /**    * 用做配置中心的演示    *    * @return    */   @GetMapping("info")   public String getConfig() {       return configInfo;  }}

Nacos中的几个空间概念:

  • NameSpaces(命名空间)

    相当于我们一个项目中的包名,Nacos中可以新建多个命名空间。微服务注册的时候,可以通过配置spring.cloud.nacos.discovery.namespace,当然,配置文件也可以配置namespace来指定对应的名称空间,如果不配置就是使用默认的public 空间。

    假如,你是好几个项目共用一个Nacos集群,就可以通过namespce来区分项目。

    在Nacos的控制台的最下边有一个命名空间,你可以新建一个试下,建完再次点击服务列表和配置列表上边会出现你的命令空间选择(如下图,我新建了一个space1的空间,public是默认的)

Nacos作为注册中心和配置中心,爱不释手的感觉

  • Group(分组)

    相当于Java中的类名,同样,一个包下可以有多个类。不过这个只是相对于配置文件来说,对于服务注册没有这么一说。它有一个默认的分组就是DEFAULT_GROUP,在新建配置文件时就会有(如下图)

  • DataID

    这个就相当于类中的方法,同样,一个类中就会有多个方法名。

Nacos作为注册中心和配置中心,爱不释手的感觉

我们的配置文件就是在上图中去添加的,下边是我截取了Nacos官方文档中对于DataID的说明:

Nacos作为注册中心和配置中心,爱不释手的感觉

新建一个配置文件试试

在配置列表中新建一个配置文件,如果你有多个命名空间,注意选择你的项目中连接的那个

Nacos作为注册中心和配置中心,爱不释手的感觉

只要点了右下角的发布,就会自动配置了,再次访问http://localhost:8002/info,就会看到已经更改了,这个是实时更改的。

这些都是很简单的操作,只要你自己做一次,就一定会使用了

Nacos的配置文件持久化

Nacos使用的是嵌入式数据库Derby,有关嵌入式数据库,可以参考在Spring中使用嵌入式数据库-H2,虽然数据库不同,但是原理操作方法一致。但是,我们想换成我们的mysql用来存储nacos的数据,可否?

  • 导入数据到你本地的Mysql库

    在Nacos安装包下的conf目录下有个nacos-mysql.sql文件,放到你的Mysql工具中执行一遍(它这个sql语句中建库,先建个库名叫nacos_config)

  • 修改conf下的application.properties文件

    98行左右,这个设置为true就是开启nacos启动的登录验证,默认用户名和密码就是nacosnacos.core.auth.enabled=true### 在最后添加如下:spring.datasource.platform=mysqldb.num=1db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=truedb.user=rootdb.password=123

以上这些内容全都来自于Nacos官网

Nacos作为注册中心和配置中心,爱不释手的感觉

这样,再次启动后Nacos后,你之前的配置文件就全都不见了,因为你配置了Mysql库。这样,你每次修改后,就会进Mysql库,这个库很简单的,你大概看一下就能明白了。

公众号后台回复”SpingCloud“获取代码和SpringCloud学习资料

猜您喜欢

往期精选▼

1。Eureka注册中心入门

2。Eureka注册中心集群搭建

3。Zookeeper和Consule作为注册中心

Nacos作为注册中心和配置中心,爱不释手的感觉

爱我,请给我好看

本文分享自微信公众号 - 小鱼与Java(Fish_Java)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
刚刚好 刚刚好
4个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
小森森 小森森
4个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
晴空闲云 晴空闲云
4个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
3个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Stella981 Stella981
1年前
Nacos跨服务器调用服务报错
利用gateway做springcloud微服务网关路由服务时出现报错情况,发现是和网关不在一个服务器的服务无法使用Nacos服务注册的IPNacos注册中心是:https://github.com/alibaba/nacos各个服务通过Nacos客户端将服务信息注册到Nacos上当Nacos服务注册的IP默认选择出问题时,可以通
Stella981 Stella981
1年前
Nacos配置中心动态获取数组配置
有的时候我们需要动态获取一系列的配置项,假设我们在nacos配置中心的配置如下,nacos配置中心的其他设置请参考Nacos搭建流程(https://my.oschina.net/u/3768341/blog/3138297)skill:name:爆炸冲刺在SpringCloud代
Stella981 Stella981
1年前
Spring Cloud Alibaba Nacos 服务配置中心和注册中心
学习在SpringCloud中使用Nacos实现服务配置中心和注册中心,类似SpringCloudConfig和SpringCloudNetflixEureka提供的功能。1概述SpringCloudAlibaba是阿里巴巴提供的一套微服务开发一站式解决方案。主要提供的功能:分布式配置中心
helloworld_34035044 helloworld_34035044
7个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
helloworld_28799839 helloworld_28799839
4个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue