竹笋

首页 » 问答 » 环境 » Nacos配置中心和服务的注册发现计算
TUhjnbcbe - 2023/8/19 22:13:00

Nacos既可以做配置中心,也可以做注册中心。我们先来看看在项目中如何使用Nacos做配置中心。

Nacos配置中心

在项目中使用Nacos做配置中心还是比较简单的,我们先创建SpringBoot项目,然后引入nacos-config的jar包,具体如下:

如果你不想使用SpringBoot默认的nacos-config版本,也可以指定版本号。

首先,我们进入到nacos的管理后台,第一步要创建命名空间,如图:

我们创建了user的服务配置,以后user相关的微服务都在这个命名空间中拉取配置。我们点击保存,命名空间的id会自动生成,这个id是十分重要的,我们要在项目中配置这个id。命名空间创建好以后,我们再创建配置文件,

在配置列表中,我们先选中刚才新建的命名空间:user服务配置。然后再点击新建,我的截图中已经把user-provider的配置文件创建好了。我们可以看一下如何新建,如图:

其中DataID我们叫做user-provider,group我们用来区分本地环境、测试环境、生产环境。配置格式我们选择yaml,内容我们先配置一个username看看能不能生效。

然后在resources目录下创建bootstrap.yml,这个bootstrap.yml和application.yml是不一样的,它优先加载于application.yml,大家一定要注意他们的区别。我们要在bootstrap.yml文件中,要配置nacos的地址、命名空间、文件名等信息,具体如下:

spring.application.name,这个不用说了,就是你应用的名称,我们叫做user-provider,用户服务的提供者。再看上面的部分server-addr,这个是nacos的地址,我们配置为nacos-host:80。其中nacos-host需要配置host,指向nacos的ip,而端口80也是需要指定的,如果不指定端口,会默认端口。再看config的部分,file-extension,文件的扩展名,这里我们使用yml,相应的,在nacos配置中心中,配置格式选择yaml。config.name对应着nacos管理后台的DataID。group,在这里是分组,我们用作区分不同环境的标识,通过项目启动时传入的参数${spring.profiles.active}获得。namespace,命名空间,这里要填写命名空间的id,这个id在nacos后台中获取。这里我们填写的是user配置服务的命名空间id。到这里,在项目中使用nacos做配置中心就搭建好了。我们在项目当中写个属性类,测试一下,看看能不能取到值。

我们写了个DatabaseConfig类,先注意一下类上面的注解,

RefreshScope这个注解可以使我们在nacos管理后台修改配置以后,项目不用重启,就可以更改变量的值。

Setter

Getter这个是Lombok的注解,可以省去setget方法。

Configuration标识这个类是一个配置类,项目启动时会实例化。在类里边,我们定义了两个变量,username和port,两个变量上面的注解

Value,可以取到对应的,属性的值。${username}这个我们在nacos管理后台已经设置了,${server.port}这个我们可以通过项目启动参数获取到,一会带着大家试一下。我们在写个controller,把变量的值打印出来,如下:

我们将username和port两个变量打印出来。好了,程序相关的部分就都写好了,然后,我们添加项目启动参数,如图:

spring.profiles.active=local,这个参数很重要,项目要用这个local值去nacos管理后台找对应的分组group是local的配置。server.port=,这个是项目的启动端口,同时,我们也将这个值打印出来了。好了,我们现在启动项目,并且在浏览器中访问我们刚才写的controller,浏览器返回的结果如下:

user:

user,是我们在nacos中配置的值,是我们添加的启动参数。返回结果没有问题。然后我们再去nacos管理后台将user改成tom,项目不重启,再看看返回的结果,如图:

确认发布以后,我们刷新一下浏览器,

tom:

我们并没有重启项目,但是返回的结果变成了tom。怎么样?使用nacos做配置中心还是比较好用的吧~

Nacos注册中心

通常情况下,我们一般会选择Zookeeper、Eureka做注册中心,其实Nacos也是可以做注册中心的。既然我们项目使用了Nacos做配置中心,那么使用Nacos做注册中心也是非常好的选择。下面让我们看看在项目中如何使用Nacos做注册中心。

首先,还是在项目中引入Nacos注册中心的jar包,如下:

我们引入了nacos-discovery的jar包,如果您不想使用默认的版本,可以指定需要引入的版本。

然后,我们就要配置Nacos注册中心的地址了,通常情况下,我们是在application.yml文件中进行配置。但是,这次我们使用了Nacos做配置中心,就可以在Nacos的管理后台进行配置了,如下:

我们需要在nacos.discovery节点下进行配置,server-addr,这个属性和前面的配置是一样的,nacos-host是配置了HOST,指向Nacos的ip,80端口也是需要指定的,默认端口是。namespace,命名空间,我们复用前面的就可以了。group,同样,我们用来区分不同的环境,它的值也是从启动参数中获取。最后,我们在项目的启动类中添加

EnableDiscoveryClient的注解,如下:

好了,到这里,服务提供者的配置以及代码上的改动都调整完毕了,我们启动一下项目,然后去Nacos管理后台看看服务是否已经注册到Nacos当中。

我们在Nacos管理后台选择服务列表菜单,可以看到我们启动的项目已经注册到nacos中了。如果我们再启动一个服务提供者会是什么样子呢?我们刚启动的项目指定的端口是,我们再启动一个项目,将端口指定为,看看服务列表是什么样子。

我们看到实例数由原来的1变为了2。说明我们的user-provider服务有了两个,我们再点右边的详情看一下,

服务的详情以及具体的实例都给我们列了出来,我们还可以编辑和下线具体的实例,这个我们后面再介绍。

好了,到这里,服务提供者的就搭建好了,我们分别访问两个服务提供者的具体连接得到的结果如下:

接下来,我们再看看服务的消费者如何搭建。我们新建一个SpringBoot项目user-consumer,这个项目我们同样使用Nacos作为配置中心,而且要从Nacos这个注册中心获取服务列表,所以引入jar包如下:

然后在bootstrap.yml中,填写nacos配置中心的相关配置,这个和前面的配置的差不多的,只需要改一下相应的文件名称就可以了。

注意config.name,我们改为了user-consumer。并且应用的名称改为了user-consumer。然后,我们再去Nacos管理后台添加user-consumer的配置,如图:

DataID就是我们配置的user-consumer,group我们同样配置为local,标识着本地。具体的配置内容是nacos服务的地址,如图。这样我们的服务消费者项目user-consumer就可以从nacos配置中心获取到注册中心的地址和命名空间,并且可以从命名空间获取服务的地址。配置的部分就到这里了,然后再去启动类中,添加

EnableDiscoveryClient注解,如下:

最后,我们写个Controller,从Nacos获取服务提供者的地址,并调用服务提供者,如下:

这个是SpringCloudAlibaba

1
查看完整版本: Nacos配置中心和服务的注册发现计算