Eureka介绍与使用

Eureka介绍与使用

1. 简介

Eureka 是 Netflix 开源的一个 RESTful 服务,用于在云中定位服务,以实现负载均衡和中间层服务器的故障转移。Eureka 服务注册中心是 Spring Cloud Netflix 组件之一,允许客户端应用程序在服务器启动时注册自己,并在运行时注销。Eureka 可以用于服务发现,使得客户端能够发现并与其他服务通信。

2. Eureka 的架构

2.1 Eureka Server

Eureka Server 是一个服务注册中心,所有的微服务应用启动时都会注册到 Eureka Server 中,并保持心跳连接。

2.2 Eureka Client

Eureka Client 是一个能够与 Eureka Server 交互的微服务实例。它在启动时向 Eureka Server 注册自己的服务信息,并定期发送心跳信息来表明自己仍然活着。

2.3 Service Discovery

服务发现是 Eureka 的核心功能之一,客户端可以通过 Eureka Server 查找其他服务的实例地址,实现服务间的通信。

3. 安装和配置

3.1 创建 Eureka Server

  1. 创建一个 Spring Boot 项目,并添加以下依赖:
xml 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. 在主类中添加 @EnableEurekaServer 注解:
java 复制代码
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
  1. application.yml 中配置 Eureka Server:
yaml 复制代码
server:
  port: 8761

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
  server:
    enable-self-preservation: false

3.2 创建 Eureka Client

  1. 创建一个 Spring Boot 项目,并添加以下依赖:
xml 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 在主类中添加 @EnableEurekaClient 注解:
java 复制代码
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}
  1. application.yml 中配置 Eureka Client:
yaml 复制代码
server:
  port: 8080

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true

4. 服务发现

Eureka Client 启动后会自动注册到 Eureka Server,并且可以通过 Eureka Server 查找到其他服务。使用 Spring 的 RestTemplate 可以很方便地实现服务间的通信。

4.1 创建一个 RestTemplate Bean

java 复制代码
@Configuration
public class RestTemplateConfig {

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

4.2 调用其他服务

java 复制代码
@RestController
public class ServiceController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/call")
    public String callService() {
        String url = "http://OTHER-SERVICE/hello";
        return restTemplate.getForObject(url, String.class);
    }
}

5. 高可用 Eureka Server

为了提高 Eureka Server 的高可用性,通常会部署多个 Eureka Server 实例,并且相互注册。配置如下:

5.1 配置多个 Eureka Server

application.yml 中配置:

yaml 复制代码
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:8761/eureka/,http://eureka2:8762/eureka/

5.2 启动多个 Eureka Server 实例

配置不同的端口并启动多个 Eureka Server 实例。

yaml 复制代码
server:
  port: 8761
---
server:
  port: 8762

6. 配置示例

6.1 Eureka Server 配置

yaml 复制代码
server:
  port: 8761

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
  instance:
    hostname: eureka1
  server:
    enable-self-preservation: false

6.2 Eureka Client 配置

yaml 复制代码
server:
  port: 8080

eureka:
  client:
    service-url:
      defaultZone: http://eureka1:8761/eureka/,http://eureka2:8762/eureka/
  instance:
    prefer-ip-address: true

7. 总结

Eureka 是一个强大的服务注册和发现工具,在微服务架构中扮演重要角色。通过 Eureka,可以轻松实现服务注册和发现,提升系统的扩展性和容错能力。以上介绍了如何安装和配置 Eureka,以及如何实现服务发现。希望对你有所帮助。


注:以上示例中所有的配置均基于 Spring Boot 和 Spring Cloud 进行,实际使用中可根据具体需求进行调整。

相关推荐
DKPT3 分钟前
JVM栈溢出和堆溢出哪个先满?
java·开发语言·jvm·笔记·学习
m0_475064503 分钟前
jvm双亲委派的含义
java·jvm
毕设源码-朱学姐4 小时前
【开题答辩全过程】以 爱心捐赠网站为例,包含答辩的问题和答案
java·eclipse
罗技1236 小时前
不用每次都改 `easysearch.yml` 也能改启动参数 —— 用 Docker 环境变量搞定一切
docker·容器·eureka
尘觉6 小时前
中秋节与 Spring Boot 的思考:一场开箱即用的团圆盛宴
java·spring boot·后端
Le1Yu7 小时前
2025-10-7学习笔记
java·笔记·学习
popoxf7 小时前
spring容器启动流程(反射视角)
java·后端·spring
AAA修煤气灶刘哥8 小时前
监控摄像头?不,我们管这个叫优雅的埋点艺术!
java·后端·spring cloud
寻星探路8 小时前
Java EE初阶启程记09---多线程案例(2)
java·开发语言·java-ee
武子康8 小时前
Java-141 深入浅出 MySQL Spring事务失效的常见场景与解决方案详解(3)
java·数据库·mysql·spring·性能优化·系统架构·事务