Spring Cloud Nacos 和 Spring Cloud Eureka 都是 Spring Cloud 微服务框架中的服务注册和发现组件,用于帮助开发者轻松地构建和管理微服务应用。它们之间的主要区别在于底层架构、服务发现方式、配置管理和支持的编程语言等方面。
Spring Cloud Eureka 是基于 Netflix Eureka 的二次封装,用于实现微服务实例自动化注册与发现。它主要负责完成微服务架构中的服务治理功能。以下是 Spring Cloud Eureka 的详解,包括代码示例。
在项目的 build.gradle 文件中添加 Spring Cloud Eureka 依赖:
dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-eureka' }
在 application.yaml 文件中配置 Eureka 服务的相关属性:
server: port: 8080 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
在启动类上添加 @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); } }
在服务提供者中,通过 @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); } }
可以通过修改 Spring Cloud Eureka 的默认界面来实现自定义界面。在 src/main/resources/static 目录下,找到 eureka-dashboard.html 文件,将其复制到项目中的静态资源目录,并进行相应的修改。
综上所述,Spring Cloud Eureka 是一个用于实现微服务实例自动化注册与发现的服务治理组件。通过在项目中添加依赖、配置 application.yaml、启动类添加依赖、服务注册与发现以及自定义 Eureka 界面,可以实现 Spring Cloud Eureka 的基本功能。
可以参考之前写的文章:https://python-basketball.blog.csdn.net/article/details/132506054?spm=1001.2014.3001.5502
Nacos 是一个全新的轻量级动态服务发现、配置管理和服务管理的平台,基于阿里巴巴自研的 Nacos 技术。
Eureka 是 Netflix 开源的一个服务注册和发现框架,基于 RESTful API 进行服务之间的通信。
Nacos 使用 DNS 方式进行服务发现,将服务注册信息存储在 DNS 服务器中,使得服务发现更加高效和可靠。
Eureka 则使用 HTTP 协议进行服务发现,需要通过请求 Eureka 服务端来获取服务注册信息。
Nacos 支持配置的动态管理,可以实现配置的修改和更新,同时支持配置的版本控制。
Eureka 不支持配置的动态管理,需要通过人工的方式进行配置的修改和更新。
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 都是服务注册和发现框架,但它们在底层架构、服务发现方式、配置管理和支持的编程语言等方面有所不同。在实际应用中,可以根据项目需求和团队熟悉程度选择合适的框架。