1.Nacos 是服务的注册中心,同等功能的还有Eureka/sofa/consol,这些都可以做注册中心用
2.Nacos是一个中间件,需要安装在linux/windouws系统中,并启动服务,启动路径是在bin下:如,/root/nacos/bin ,启动命令是./startup.sh -m standalone,关闭的话,直接./shutdown.sh
3.作为注册中心,那就是所有服务都要注册到nacos服务中,这其中包括调用方和服务方均需要注册(调用方根据业务需要也会变成服务方)
4.关于nacos使用,对于应用服务来讲是少不了引入nacos的依赖,谁使用谁引入,谁项注册到nacos服务谁引入,并且要在配置文件中配置nacos的地址及端口,
依赖如下:服务方在pom.xml引入,
<!--nacos 服务注册发现-->
<dependency> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置如下:应用在application.yml中配置
spring:
application:
name: item-service # 服务名称
cloud:
nacos:
server-addr: 192.168.150.101:8848 # nacos地址
5.如果一个服务应用部署了多个端口,服务会自动负载到不同的机器,nacos本身作为注册中心,就有负载均衡的功能,对于网关路由来讲,网关只是去找服务的名字,并没有去找端口,所以交易从网关进来,网关直接去注册中心找服务名称,所以会找到不同IP/端口的同一个应用,实现负载均衡
6.对于nacos的负载均衡来讲,这个实现也依赖了springCloud提供的一个服务发现的工具(DiscoveryClient),并且已经自动装配,党引入了服务发现上面第4条依赖的时候,这个类也自动引入了,
用法如下:
1.注入 服务发现工具
private final DiscoveryClient discoveryClient;
2.获取实例
List<ServiceInstance> instances = discoveryClient.getInstances("item-service");
3.负载均衡随机获取实例IP
ServiceInstance serviceInstance = instances.get(RandomUtil.randomInt(instances.size()));
4.获取uri
URI uri = serviceInstance.getUri();