由于在大型为微服务项目中存在很多服务提供者,甚至相同的服务会使用不同的路径去调用,为了更好的管理并调用这些服务,我们需要使用注册中心来帮助我们管理这些服务
以nacos为例,
1.当使用nacos来管理服务的时候,服务启动时会将自己的注册信息,例如服务名,Ip,端口注册到注册中心中。
2.调用者可以直接从调用中心订阅需要的服务,便可以获取该服务对应的服务实例列表(一个服务可以拥有多个实例服务,他们具有相同的服务名称,但是请求的路径不同)
3.调用者可以通过一系列算法决定使用那个实例服务
4.通过实例服务,我们可以获取到访问这个服务的Path路径,也可以决定直接使用路径访问或者使用插件完成远程调用
当服务提供者实例故障或者启动新实例时
1.当启动时会自动将服务信息放入注册中心中,同时定期发送自己的健康状态。
2.当注册中心长时间无法收到服务实例的发送的健康状态,会向实例发送请求询问,如果请求无法成功,便会i认为实例故障,从实例服务列表中移除,同时通知使用者,更新本地的服务列表
基于docker安装nacos就看这个大佬的博客吧
https://www.cnblogs.com/johnnyzen/p/18097914
在装完nacos后,启动服务,访问下面地址:http://localhost:8848/nacos
,注意将localhost替换为你自己的虚拟机IP地址。首次访问会跳转到登录页,账号密码都是nacos.
完成nacos安装后我们就可以开始注册服务了
首先需要导入依赖
<!--nacos 服务注册发现--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
然后在服务的application.yml中添加nacos地址配置:
spring: application: name: item-service # 服务名称 cloud: nacos: server-addr: localhost:8848 # nacos地址
然后启动服务就能在网页上看到该服务
服务发现
调用者使用服务时,也要通过nacos去获取远程调用的服务
因此也需要导入nacos的依赖
<!--nacos 服务注册发现--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
这个依赖中同时包含了服务注册和发现的功能。因为任何一个微服务都可以调用别人,也可以被别人调用,即可以是调用者,也可以是提供者。
配置nacos的地址
spring: cloud: nacos: server-addr: localhost:8848
在发现服务时,调用者会获得多个实例,因此需要负载均衡算法去选择对应的实例。
在未使用nacos时,我们的服务中远程调用都是把url写在代码中
但在使用nacos后我们可以使用获取到的实例的path动态的获取服务
可以看到虽然访问的服务不是固定的了,但是代码依旧很难看,因此最好在使用服务远程调用的插件来调用服务