Nacos注册中心

  1. Nacos是springcloud的扩展,注册中心功能通过NacosDiscoveryClient 继承DiscoveryClient,在springcloud中,与Eureka可以无侵入的切换。注册中心可以手动剔除服务实例,通过消息通知客户端更新缓存的实例信息,完整调用链路示例如下:

  2. Nacos 的关键特性包括:

    • 服务发现和服务健康监测
    • 动态配置服务,带管理界面,支持丰富的配置维度。
    • 动态 DNS 服务
    • 服务及其元数据管理
  3. Nacos与Eureka相比优势如下:

    Nacos在自动或手动下线服务,使用消息机制通知客户端,服务实例的修改很快响应;Eureka只能通过任务定时剔除无效的服务。
    Nacos可以根据namespace命名空间,DataId,Group分组,来区分不同环境(dev,test,prod),不同项目的配置。

  4. Nacos的开启

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring‐boot‐dependencies</artifactId>             
                <version>2.1.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring‐cloud‐dependencies</artifactId>             
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring‐cloud‐alibaba‐dependencies</artifactId>             
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    • 消费者与提供者当中都添加nacos的使用依赖
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring‐cloud‐starter‐alibaba‐nacos‐discovery</artifactId>
    </dependency>
    
    • 服务注册
    spring:
      application: 
        name: nacos‐restful‐provider
      cloud: 
        nacos: 
          discovery: 
            server‐addr: 127.0.0.1:8848
    
    • 服务发现
    spring: 
      application: 
        name: nacos‐restful‐consumer
      cloud: 
        nacos:
          discovery:
            server‐addr: 127.0.0.1:8848
    
    • 服务消费
    /*改Controller中远程调用的代码*/
    
    //服务id即注册中心的中的服务名      private String serviceId="nacos‐restful‐provider";   
    
    @Autowired
    LoadBalancerClient loadBalancerClient;   
    
    @GetMapping(value = "/service")
    public String service(){ 
        RestTemplate restTemplate = new RestTemplate();     
        //调用服务 
        //String providerResult = restTemplate.getForObject("http://" + providerAddress +  "/service",String.class);
        ServiceInstance serviceInstance = loadBalancerClient.choose(serviceId);      
        URI uri = serviceInstance.getUri();
        String providerResult = restTemplate.getForObject(uri+"/service",String.class);
        return "consumer invoke | " + providerResult;     }
    
    • 负载均衡

      • 上边使用的LoadBalancerClient就是一个客户端负载均衡器,具体使用的是Ribbon客户端负载均衡器。 Ribbon在发送请求前通过负载均衡算法选择一个服务实例,然后进行访问,这是客户端负载均衡。即在客户端就进行负载均衡的分配.
      • RoundRobinRule(默认):轮询,即按一定的顺序轮换获取实例的地址;
      • 在服务消费方的配置文件中修改默认的负载均衡策略:
    nacos‐restful‐provider:  #服务提供方的服务名称
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    
posted @ 2024-05-23 08:56  Hanyta  阅读(9)  评论(0编辑  收藏  举报