linux 启动nacos报错_SpringCloud Alibaba | 一文详解Nacos的服务注册与配置

论坛 期权论坛 脚本     
已经匿名di用户   2022-3-21 23:41   3084   0

2f1fd2b2a17b2b3a7577f3305aa830c8.png

服务注册和配置中心

目前Spring Cloud有很多的版本,但不管哪个版本,服务的注册和配置都是微服务的开端。

那么什么是服务注册呢?

一个公司里面的项目可能非常多,而项目直接又相互依赖,比如订单系统、物流系统、支付系统等,他们直接要相互调用,如果人工去维护他们直接的接口,那工作量肯定巨大,而且人为的难免会出错,这时候服务注册中心的用处就来了,每个系统都需要到它那里对接,注册中心可以集合各服务地址,并且维护他们之间的关系,确保各服务可用。

例如小区的物业拥有各居民的联系方式,每户人家入住和出户都要去他那里登记。所以我们想找某户人家,直接去他那里查就行。

那么配置中心是什么呢?

例如公交车系统有一个人员类型的配置person_type,目前只有司机、乘务员、普通乘客。后来搞活动出现了一个特殊乘客的类型,此时如果没有配置中心,可能需要改所有关于人员配置的代码,而使用配置中心,只需要在配置管理平台加一条person_type为特殊乘客的配置即可。

Spring Cloud本来使用Eurake作为服务注册中心,但是他已经停更了,这对于正在飞速发展的微服务来说无疑是巨大的打击。所以强大的阿里巴巴出了自己的版本,并使用Nacos作为注册中心和配置中心。

中文文档-SpringCloud Alibabagithub.com

Nacos服务端安装

nacos是需要安装服务端才能访问的,这里我们称之为Nacos Server,我们写的代码全都称为客户端(我入门时懵逼了很久,一直问为什么无法访问)

Nacos服务端下载github.com

Linux和Windows版本的都有,具体的安装教程我就不说了,百度一大把,官方文档如下

Nacos中文文档nacos.io

但是要安装后配置时要注意以下两点:

1、Linux安装时要注意内存大小,我当时安装时就是内存空间不足,无法分配

2、nacos自带数据库,如果使用自定义的数据库,需要建好数据库,并创建表结构

Nacos的sql地址github.com

我是在Centos7中使用docker安装的,用docker容器管理这些软件,真香!

另外关于阿里云服务器不知道如何配置的同学可以关注我的公众号:全栈船长,里面有我的微信

最后访问的服务端如下

9c29436bb06795ac9de4b1595d97e4a2.png

Nacos客户端

前面说了,我们使用nacos都属于客户端,而客户端又分为服务提供者和服务消费者。无非就是一个提供接口,一个访问接口,例如客服系统需要查看订单,就要访问订单系统的接口。

一个spring cloud项目是有众多服务的,也就是众多模块module,所以我们需要创建一个父工程,在父工程中统一maven依赖的版本,这样就能实现module的依赖管理

1、创建maven项目作为父工程

cc7c5b945f99643aa9b7dbfe91a18a9b.png

2、删除src目录,因为这仅仅是为了管理依赖,不需要写代码。在pom.xml文件中添加SpringCloud Alibaba的依赖和Spring Boot的依赖,注意都是2.x的版本

3326d46f690bdc0728c601b4398f78f5.png

服务提供者

服务提供者是提供接口给消费者调用的,所以它跟正常的spring boot项目无差异,只是需要将自己作为一个服务注册到nacos注册中心去

1、创建一个spring boot的web项目,并将pom.xml中的<parent>改成父工程的依赖,然后添加spring-cloud-starter-alibaba-nacos-discovery依赖

ba42041177ccdb77b7cfa696417c728b.png

2、修改application.yml配置文件,配置上面我们安装的nacos服务的地址,并且定义服务提供者的端口号为1001

d1d68bc7d4e6b8b08e9dea5c9d787109.png

3、在启动类中添加开启服务注册的注解,这样才会向Nacos发送注册信息,成为一个服务

ce2b5957b834c2d6742cec0531af06a8.png

4、最后可以编写一个Controller,对外提供接口

fab06fe26180b768456cef3811bcde4c.png

此时启动该服务提供者,打开Nacos Server服务端的服务列表,就可以看到我们刚刚启动的服务被注册进来了。

bc86795cd59088f4bd915e9821757f89.png

注意服务名就是我们的spring-application-name参数,目前我们端口号为1001的应用名叫nacos-provider-appName,我们可以创建多个不同端口号的项目,如1002、1003、1004,然后他们的应用名都叫nacos-provider-appName,此时注册到Nacos服务中心去,你们猜会怎么着?

没错,它的实例数量会变成4个,并且当客户端去访问时,可以通过负载均衡算法选择其中一个,减少单个服务的压力

服务消费者

1、按上面的方式创建一个springboot项目,并且按上面的方式修改依赖,最后修改application.xml配置文件,将服务名改成nacos-consumer-appName,代表消费者,将端口号改成2001。

32f0a0caf5896c5f99c339d328ab85d0.png

2、在启动类中,除了添加服务注册的注解@EnableDiscoveryClient,我们还需要使用RestTemplate作为访问服务提供者接口的工具,其中@LoadBalanced注解是用于负载均衡的,也就是上面说的在多个相同服务中选取一个进行访问

注意:在nacos中必须添加这个注解才能用RestTemplate访问,否则会报错找不到服务,而Euraka中不会

a262a2c2a3cd26e4271ea8b2a95ae08b.png

3、创建一个Controller,用于访问服务提供者的接口。平时我们调用接口都是用url的方式,如http://localhost:1001/echo/hello。在Nacos中,我们可以使用服务名去访问,这样就可以不用管服务端的ip和端口号的变化

a30fc606bbca9a096ed4c9e6ec3aadc4.png

此时启动消费者,可以看到Nacos Server服务端的服务列表中多了一个消费者实例。

df78ba52b813f7d4a36dcdd3fe4ceb89.png

此时调用消费者的接口,如下,说明消费者接收到请求后,又向服务提供者请求,最终拿到请求结果并返回

fc0996947848277bf1936c3f94840e31.png

小结:上面实现的服务提供者和消费者就是依赖Nacos中的服务注册功能,Nacos维护了一份ip和服务名对照表(类似ip和域名),将每个服务都注册到Nacos中,然后直接通过服务名去访问即可。真香!

以上内容有不理解的地方可以关注我的公众号【全栈船长】,里面有我的微信,直接联系我。接下来我们看看配置中心又有何魅力!

Nacos配置中心

1、配置中心的配置都是放在Nacos Server的配置管理中,点击右边的+号按钮即可添加配置

59eaba7946225940f2871aeb958be012.png

2、需要配置的是DataID和Group,DataID其实就是这条配置的命名空间,而Group使用默认的即可

1389bb981d48f2f63f4d1d64f7425d50.png

注意:配置项的等号两边不要出现空格,否则无法解析

DataID是有规律的,它是由下面的格式组成

//前缀-项目环境.数据格式
${prefix} - ${spring-profiles-active} . ${file-extension}
prefix:默认是应用名称nacos-provider-appName,也可以通过spring-cloud-nacos-config-prefix配置
spring-profile-active:当前项目环境,例如dev、test等,如果没配置则为空,连接符 - 也去掉
file-extension:配置内容的数据格式,目前只支持properties类型

3、修改端口号为1001的服务提供者的pom.xml文件,增加依赖spring-cloud-starter-alibaba-nacos-config

f2df468956f8af9c8a27cbf0f1efb765.png

4、在resources文件夹下添加一个配置文件bootstrap.yml,填写配置中的的配置。

0f6c8273d729a743f6af3a995bd960ef.png

为什么不在application.yml中配置呢?大家都知道boostrap.yml的加载顺序高于application.yml,所以读取到boostrap.yml时就会去连接Nacos Server并拿到该应用程序对应的配置,如果放在application.yml中配置的话,你会发现启动时就报错

5、在Controller中添加读取配置的接口

37c7c1b2e0f8dea985ca6c1034fa4348.png

6、在端口为2001的服务消费者中读取服务提供者的接口

238fff292e0786c8799536a331e0d1dc.png

重新启动服务提供者和服务消费者,访问服务消费者http://localhost:2001/config

3922a8b40c0d4d544c494435a01d03fd.png

此时已经成功拿到配置,这时候公交车的票价升为3元了,同时人员类型增加了一个【特殊乘客】,那么我们不需要动任何代码,只需要修改Nacos Server中的配置即可

797de80fdfc6b73f12c7cf6ab0d126fb.png

重新访问服务消费者

7d7b0ed120c8bde518f4accc05fa3a22.png

真香!!

不过这里有几个注意事项:

1、先在Nacos Server中按一定规则添加相应的配置项,否则会报错
2、注意配置中心地址的配置,要放在bootstrap.yml中,否则还是找不到配置

如果对以上的内容有任何疑问的同学,可以关注公众号【全栈船长】,获取我的联系方式

1ea7cd1957404f76b2066f22c23cb3f3.png
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP