Spring Cloud Nacos 和 Eureka区别,包含实战代码
作者:mmseoamin日期:2023-12-14

目录

  • 一、Spring Cloud Eureka详解
  • 二、Spring Cloud Nacos详解
  • 三、Spring Cloud Nacos和Eureka区别

    在这里插入图片描述

    Spring Cloud Nacos 和 Spring Cloud Eureka 都是 Spring Cloud 微服务框架中的服务注册和发现组件,用于帮助开发者轻松地构建和管理微服务应用。它们之间的主要区别在于底层架构、服务发现方式、配置管理和支持的编程语言等方面。

    一、Spring Cloud Eureka详解

    Spring Cloud Eureka 是基于 Netflix Eureka 的二次封装,用于实现微服务实例自动化注册与发现。它主要负责完成微服务架构中的服务治理功能。以下是 Spring Cloud Eureka 的详解,包括代码示例。

    1. 添加依赖

      在项目的 build.gradle 文件中添加 Spring Cloud Eureka 依赖:

    dependencies {  
       implementation 'org.springframework.cloud:spring-cloud-starter-eureka'  
    }
    
    1. 配置 application.yaml

      在 application.yaml 文件中配置 Eureka 服务的相关属性:

    server:  
     port: 8080
    eureka:  
     client:  
       serviceUrl:  
         defaultZone: http://localhost:8761/eureka/  
    
    1. 启动类添加依赖

      在启动类上添加 @EnableDiscoveryClient 注解,以启用 Eureka 服务发现功能:

    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;  
    import org.springframework.boot.SpringApplication;  
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @SpringBootApplication  
    @EnableDiscoveryClient  
    public class EurekaDemoApplication {  
       public static void main(String[] args) {  
           SpringApplication.run(EurekaDemoApplication.class, args);  
       }  
    }
    
    1. 服务注册与发现

      在服务提供者中,通过 @EnableEurekaServer 注解启用 Eureka 服务注册功能,并在启动类上添加 @Value 注解配置 Eureka 服务端口号:

    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;  
    import org.springframework.boot.SpringApplication;  
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @SpringBootApplication  
    @EnableEurekaServer(port = 8761)  
    public class EurekaServerApplication {  
       public static void main(String[] args) {  
           SpringApplication.run(EurekaServerApplication.class, args);  
       }  
    }
    

    在服务消费者中,通过 @RestController 和 @RequestMapping 注解暴露一个 REST 接口,并在 @Value 注解中配置 Eureka 服务端口号。同时,使用 RestTemplate 调用其他服务:

    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;  
    import org.springframework.web.bind.annotation.GetMapping;  
    import org.springframework.web.bind.annotation.RestController;  
    import org.springframework.boot.SpringApplication;  
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @SpringBootApplication  
    @RestController  
    @EnableDiscoveryClient  
    public class EurekaClientApplication {
       @Value("${eureka.client.serviceUrl.defaultZone}")  
       private String defaultZone;
       @GetMapping("/hi")  
       public String home(@RequestParam String name) {  
           String url = defaultZone + "/eureka-client/hello";  
           RestTemplate restTemplate = new RestTemplate();  
           return restTemplate.getForObject(url, String.class, name);  
       }
       public static void main(String[] args) {  
           SpringApplication.run(EurekaClientApplication.class, args);  
       }  
    }
    
    1. 自定义 Eureka 界面

      可以通过修改 Spring Cloud Eureka 的默认界面来实现自定义界面。在 src/main/resources/static 目录下,找到 eureka-dashboard.html 文件,将其复制到项目中的静态资源目录,并进行相应的修改。

      综上所述,Spring Cloud Eureka 是一个用于实现微服务实例自动化注册与发现的服务治理组件。通过在项目中添加依赖、配置 application.yaml、启动类添加依赖、服务注册与发现以及自定义 Eureka 界面,可以实现 Spring Cloud Eureka 的基本功能。

    二、Spring Cloud Nacos详解

    可以参考之前写的文章:https://python-basketball.blog.csdn.net/article/details/132506054?spm=1001.2014.3001.5502

    三、Spring Cloud Nacos和Eureka区别

    1. 底层架构:

      Nacos 是一个全新的轻量级动态服务发现、配置管理和服务管理的平台,基于阿里巴巴自研的 Nacos 技术。

      Eureka 是 Netflix 开源的一个服务注册和发现框架,基于 RESTful API 进行服务之间的通信。

    2. 服务发现方式:

      Nacos 使用 DNS 方式进行服务发现,将服务注册信息存储在 DNS 服务器中,使得服务发现更加高效和可靠。

      Eureka 则使用 HTTP 协议进行服务发现,需要通过请求 Eureka 服务端来获取服务注册信息。

    3. 配置管理:

      Nacos 支持配置的动态管理,可以实现配置的修改和更新,同时支持配置的版本控制。

      Eureka 不支持配置的动态管理,需要通过人工的方式进行配置的修改和更新。

    4. 支持的编程语言:

      Nacos 支持多种编程语言,包括 Java、Python、Go、Node.js 等。

      Eureka 仅支持 Java 语言。

      下面是一个简单的示例来展示如何使用 Spring Cloud Nacos 和 Spring Cloud Eureka:

      Nacos

      首先,需要在项目中引入 Nacos 的依赖:

      
       com.alibaba.cloud  
       spring-cloud-starter-alibaba-nacos-discovery  
      
      
       com.alibaba.cloud  
       spring-cloud-starter-alibaba-nacos-config  
      
    

    然后,在启动类上添加 @EnableDiscoveryClient 和 @NacosPropertySource 注解:

    import com.alibaba.cloud.spring.boot.context.annotation.config.NacosPropertySource;  
    import com.alibaba.cloud.spring.boot.context.annotation.EnableDiscoveryClient;  
    import org.springframework.boot.SpringApplication;  
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @SpringBootApplication  
    @EnableDiscoveryClient  
    @NacosPropertySource(dataId = "your-data-id", autoRefreshed = true)  
    public class NacosDemoApplication {  
       public static void main(String[] args) {  
           SpringApplication.run(NacosDemoApplication.class, args);  
       }  
    }
    

    Eureka

    首先,需要在项目中引入 Eureka 的依赖:

      
       com.netflix  
       eureka-client  
      
    

    然后,在启动类上添加 @EnableDiscoveryClient 注解,并配置 Eureka 服务端地址:

    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;  
    import org.springframework.boot.SpringApplication;  
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @SpringBootApplication  
    @EnableDiscoveryClient(eurekaServerUrl = "http://localhost:8761/eureka/")  
    public class EurekaDemoApplication {  
       public static void main(String[] args) {  
           SpringApplication.run(EurekaDemoApplication.class, args);  
       }  
    }
    

    综上所述,Spring Cloud Nacos 和 Spring Cloud Eureka 都是服务注册和发现框架,但它们在底层架构、服务发现方式、配置管理和支持的编程语言等方面有所不同。在实际应用中,可以根据项目需求和团队熟悉程度选择合适的框架。