阿里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

image

修改端口号可以在本地启动多个实例

服务调用方

配置 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);

原理分析

  1. RibbonAutoConfiguration 配置类 配置了 LoadBalancerClient 的实现类为 RibbonLoadBalancerClient。
  2. RibbonClientConfiguration 配置类 创建的 ZoneAwareLoadBalancer 使用到了我们自己创建的 NacosRule。
  3. LoadBalancerAutoConfiguration会对包含@LoadBalanced注解的RestTemplate添加LoadBalancerInterceptor拦截器, 它最终会通过 NacoRule 来实现负载均衡。
  4. 如果我们不配置 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。

参考

微服务注册中心Nacos入门
nacos的AP和CP模式

posted @ 2023-08-27 08:48  strongmore  阅读(44)  评论(0编辑  收藏  举报