6,nacos使用

1,什么是Nacos
Nacos 支持基于 DNS 和基于 RPC的服务发现(可以作为SpringCLoud的注册中心),动态配置服务(可以做配置中心),动态DNS服务。
官方这样介绍的:

Nacos 致力于帮助您发现,配置和管理微服务。Nacos提供 一组简单易用的特性集,帮助您快速实现动态服务发现,服务配置,服务元数据以及流量管理。

Nacos帮助您更敏捷和容易构建,交付和管理微服务平台。Nacos 是构建以 服务为中心的现代应用架构(例如微服务范式)的服务基础社设施

2,Nacos与Eureka有什么区别
分布式CAP理论告诉我们,Cp和AP不能同时满足
相比与Eureka:(1)Nacos具备服务优雅上下线和流量管理(API+后台管理页面),而Eureka的后台页面仅供展示,需要使用api操作上下线且不具备流量管理功能。
2,从部署上看,Nacos整合了注册中心,配置中心功能,把原来2套集群整合成一套,简化了部署维护。
(3),从长远来看Eureka开源工作已停止,后续不再更新和维护,而Nacos在以后的版本会支持SpringCloud+Kubermetes的组合,填补2着的鸿沟,在2套体系下可以采用同一套服务发现和配置管理的解决方案,这将大大的简化使用和维护成本。同时来说Nacos 计划实现Service Mesh,是未来微服务的趋势。
(4),从伸缩性和扩展性来看Nacos支持跨注册中心同步,而Eureka 不支持且在伸缩扩容方面,nacos比Eureka更(nacos 支持大数量级的集群)
(5)Nacos 具有分组隔离功能,一套Nacos可以支撑多项目,多环境。

阿里Nacos异常情况leader挂了
1,不影响服务之间互相调用
2,不影响服务注册
3,不影响服务正常启动拉取配置文件
4,选举新leader差不多4,5秒钟

3,Nacos与SpringCloud
3.1作为配置中心
下载nacos-server

https://github.com/alibaba/nacos/releases

启动过程参考官方文档:https://nacos.io/zh-cn/docs/quick-start.html

启动后登录: http://127.0.0.1:8848/nacos/index.html 用户名:nacos 密码:nacos

image

集成在SpringCloud项目中,引入pom



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.4.RELEASE
         
    
    com.forezp
    nacos-consumer
    0.0.1-SNAPSHOT
    nacos-consumer
    Demo project for Spring Boot


    
        1.8
        Greenwich.RELEASE
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            0.9.0.RELEASE
        

        
            org.springframework.cloud
            spring-cloud-starter-ribbon
        

        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        

        
        
        
        
        
        

    


    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



application.yml如下:


server:
  port: 8763
spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
package com.taotao.nacos1;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class Nacos1Application {
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(Nacos1Application.class, args);
    }

}

在nacos控制台添加一个配置,参考官方文档,然后启动项目

构建服务消费者:nacos-consuer
和nacos-provider一样,构建服务消费者nacos-consumer,nacos-consumer的启动端口8763, 构建过程同nacos-provider 新建一个Spring Boot项目,Spring boot版本为2.1.4.RELEASE,Spring Cloud 版本为Greenwich.RELEASE,在pom文件引入nacos的Spring Cloud起步依赖,代码如下

集成在SpringCloud项目中,引入pom



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.4.RELEASE
         
    
    com.forezp
    nacos-consumer
    0.0.1-SNAPSHOT
    nacos-consumer
    Demo project for Spring Boot


    
        1.8
        Greenwich.RELEASE
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            0.9.0.RELEASE
        

        
            org.springframework.cloud
            spring-cloud-starter-ribbon
        

        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        

        
        
        
        
        
        

    


    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



application.yml如下:


server:
  port: 8764
spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConsuerApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosConsuerApplication.class, args);
    }

    
}


验证服务注册的发现
分别启动工程,待工程启动成功后,在访问http://127.0.0.1:8848/nacos/index.html#/serviceManagement?dataId=&group=&appName=&namespace=&serverId=, 可以发现可以发现nacos-provider和nacos-consumer,均已经向nacos-server注册,如下图所示:

image

服务调用:
nacos作为服务注册和发现组建时,在进行服务消费,可以选择RestTemplate 和Feign等方式。这和使用Eureka和consul作为服务注册和发现的组件一样的,没有什么区别。这是因为Spring-cloud-starter-alibab-nacos-discovery依赖实现了Spring Cloud服务注册和发现的相关接口,可以和其他的服务注册发现组件无缝切换。

提供服务
在nacos-provider工程,写一个Controller提供API服务,代码如下:

package com.taotao.nacosconsuer.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;



@RestController
public class ProviderController {

Logger logger= LoggerFactory.getLogger(ProviderController.class);

@GetMapping("/hi")
public String hi(@RequestParam(value = "name",defaultValue = "forezp",required = false)String name){

        return "hi "+name;
    }
}

消费服务
在这里使用2种方式消费服务,一种是RestTemplate,一种是Feign。

使用RestTemplate消费服务
RestTemplate 可以用Ribbon作为负载均衡组件,在nacos-consumer 工程中引入ribbon的依赖:



    org.springframework.cloud
    spring-cloud-starter-ribbon



在Nacos1Application启动文件里注入Restemplate,:

package com.taotao.nacos1;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class Nacos1Application {

    public static void main(String[] args) {
        SpringApplication.run(Nacos1Application.class, args);
    }

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

加上@LoadBalanced注解可在RestTemplate上开启LoadBalance负载均衡的功能。

写一个消费服务的ConsumerController,代码如下:


@RestController
public class ConsumerController {

    @Autowired
    RestTemplate restTemplate;

 @GetMapping("/hi-resttemplate")
    public String hiResttemplate(){
        return restTemplate.getForObject("http://nacos-provider/hi?name=resttemplate",String.class);

    }

重启工程,在浏览器上访问:http://localhost:8763/hi-resttemplate,可以在浏览器上展示正确的响应,这时nacos-consumer调用nacos-provider服务成功。

FeignClient调用服务
在nacos-consumer的pom 文件引入一下的依赖



    org.springframework.cloud
   spring-cloud-starter-openfeign


在Nacos1Application启动文件上加上@EnableFeignClients注解开启FeignClient的功能。

@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class Nacos1Application {

    public static void main(String[] args) {
        SpringApplication.run(Nacos1Application.class, args);
    }
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
    

写一个FeignClient,调用nacos-provider的服务,代码如下:

package com.taotao.nacos1.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;


@FeignClient("nacos-provider")
public interface ProviderClient {

    @GetMapping("/hi")
    String hi(@RequestParam(value = "name", defaultValue = "forezp", required = false) String name);
}

写一个消费API,该API使用ProviderClient来调用nacos-provider的API服务,代码如下:





@RestController
public class ConsumerController {


    @Autowired
    ProviderClient providerClient;

    @GetMapping("/hi-feign")
    public String hiFeign(){
       return providerClient.hi("feign");
    }
}

重启工程,再浏览器上访问http://localhost:8763/hi-feign,可以在浏览器上展示正确的响应,这时候nacos-consumer调用nacos-provider服务成功。

总结
本文比较详细的介绍了如何使用Nacos作为服务注册中心,并且使用案例介绍了如何在使用nacos作为服务注册中心时消费服务

你可能感兴趣的:(6,nacos使用)