阿里Nacos注册中心简单使用
使用
服务端
服务端安装及配置运行和配置中心一样,Nacos配置中心
客户端
添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
配置 Nacos 地址
spring:
application:
name: demo-eureka-client
cloud:
nacos:
discovery:
server-addr: http://localhost:8848
namespace: 2a055716-5400-4fd5-b580-afc1eacfec91 #命名空间ID
enabled: true
cluster-name: DEFAULT
username: nacos
password: nacos
修改端口号可以在本地启动多个实例
服务调用方
配置 RestTemplate 及 负载均衡规则
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced //必须加此注解,不然找不到服务名对应的地址
public RestTemplate restTemplate() {
return new RestTemplate();
}
/**
* 负载均衡策略
*
* @return
*/
@Bean
public IRule iRule() {
return new NacosRule();
}
}
服务调用,调用 product 服务的/api/v1/product/get 接口
String resp = restTemplate.postForObject("http://product/api/v1/product/get", null, String.class);
原理分析
- RibbonAutoConfiguration 配置类 配置了 LoadBalancerClient 的实现类为 RibbonLoadBalancerClient。
- RibbonClientConfiguration 配置类 创建的 ZoneAwareLoadBalancer 使用到了我们自己创建的 NacosRule。
- LoadBalancerAutoConfiguration会对包含@LoadBalanced注解的RestTemplate添加LoadBalancerInterceptor拦截器, 它最终会通过 NacoRule 来实现负载均衡。
- 如果我们不配置 NacosRule,会使用 RibbonClientConfiguration 中配置的默认实现 ZoneAvoidanceRule。
Nacos的AP和CP模式
Nacos支持CP+AP模式,即Nacos可以根据配置识别为CP模式或AP模式,默认是AP模式。
如果注册Nacos的client节点注册时ephemeral=true,那么Nacos集群对这个client节点的效果就是AP,采用distro协议实现;而注册Nacos的client节点注册时ephemeral=false,那么Nacos集群对这个节点的效果就是CP的,采用raft协议实现。
根据client注册时的属性,AP,CP同时混合存在,只是对不同的client节点效果不同。Nacos可以很好的解决不同场景的业务需求。
com.alibaba.cloud.nacos.NacosDiscoveryProperties#ephemeral
来配置,默认为true,表示默认AP。