微服务Eureka组件的介绍、安装、使用

微服务 Eureka 组件的介绍、安装与使用详解

在微服务架构中,服务注册与发现是至关重要的一环,而 Eureka 作为 Netflix 开源的服务注册中心,广泛应用于 Spring Cloud 微服务体系中。本文将带你全面了解 Eureka 的概念、安装及在 Spring Boot 中的使用方法。


1️⃣ Eureka 概念介绍

Eureka 是一个基于 REST 的服务注册与发现组件,主要用于微服务系统中:

  • 服务注册:微服务启动时向 Eureka Server 注册自己的信息(IP、端口、服务名等)。
  • 服务发现:微服务调用方从 Eureka Server 获取其他服务的实例信息,实现动态调用。
  • 健康检查:Eureka 会定期检测注册服务的状态,剔除不可用实例。

Eureka 角色:

  • Eureka Server:服务注册中心
  • Eureka Client:微服务客户端,既向 Server 注册,又能发现其他服务

2️⃣ Eureka 的特点

  1. 基于 REST 的轻量级注册中心
  2. 高可用:支持集群部署,自动复制注册信息
  3. 自我保护机制:当网络异常导致大量服务下线时,防止误剔除
  4. 与 Spring Cloud 完美集成:配置简单,开箱即用

3️⃣ Eureka Server 的安装与配置

假设我们使用 Spring Boot + Spring Cloud Netflix Eureka

3.1 新建 Spring Boot 项目

  • 添加依赖(Maven):
xml 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>eureka-server-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.4</version>
        <relativePath/>
    </parent>

    <properties>
        <java.version>17</java.version>
        <spring-cloud.version>2022.0.4</spring-cloud.version>
    </properties>

    <dependencies>
        <!-- Eureka Server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <!-- Spring Boot Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3.2 启动类添加注解

java 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

3.3 配置 application.yml

yaml 复制代码
server:
  port: 8761

eureka:
  client:
    register-with-eureka: false # Server 不注册自己
    fetch-registry: false # Server 不需要获取注册表
spring:
  application:
    name: eureka-server-demo

启动后访问:

bash 复制代码
http://localhost:8761

你会看到 Eureka Server 的管理界面。


4️⃣ Eureka Client 的安装与使用

4.1 添加依赖

yaml 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

4.2 配置 application.yml

yaml 复制代码
spring:
  application:
    name: javaquestion-service  # 服务名
server:
  port: 8081
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

4.3 启动类添加注解

java 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class JavaQuestionServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(JavaQuestionServiceApplication.class, args);
    }
}

启动后,你可以在 Eureka Server 界面看到注册成功的服务。


5️⃣ 服务调用示例(Feign + Eureka)

5.1 添加依赖

yaml 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

5.2 创建 Feign 接口

java 复制代码
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(name = "javaquestion-service")
public interface JavaQuestionClient {
    @GetMapping("/javaquestion/list")
    String getQuestions();
}

5.3 使用 Feign 调用

java 复制代码
@RestController
@RequestMapping("/api")
public class TestController {

    @Resource
    private JavaQuestionClient javaQuestionClient;

    @GetMapping("/questions")
    public String getQuestions() {
        return javaQuestionClient.getQuestions();
    }
}

调用时无需关心服务实例的 IP 和端口,Eureka 会自动发现可用实例。


6️⃣ Eureka 集群部署

  • 多个 Eureka Server 互相注册,形成高可用集群
  • 配置示例(application.yml):
yaml 复制代码
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:8761/eureka/,http://eureka2:8761/eureka/

这样一个 Eureka Server 宕机,其他仍可提供服务注册和发现。


7️⃣ 总结

Eureka 作为微服务注册与发现组件,具有轻量、高可用、易集成的特点。

在 Spring Cloud 微服务中,它实现了:

  • 服务动态注册
  • 服务发现
  • 客户端负载均衡
  • 与 Feign 等组件无缝集成

通过 Eureka,你的微服务系统可以动态扩缩容,同时保证服务调用稳定可靠。

相关推荐
绝无仅有25 分钟前
Go Timer 面试指南:常见问题及答案解析
后端·算法·架构
你我约定有三40 分钟前
面试tips--java--equals() & hashCode()
java·开发语言·jvm
努力也学不会java1 小时前
【设计模式】简单工厂模式
java·开发语言·设计模式·简单工厂模式
就叫飞六吧2 小时前
基于Spring Boot的短信平台平滑切换设计方案
java·spring boot·后端
杯莫停丶2 小时前
使用Java实现PDF文件安全检测:防止恶意内容注入
java·安全·pdf
爱读源码的大都督3 小时前
小白LLM教程:不训练模型,如何进行微调?
java·人工智能·后端
蟾宫曲3 小时前
网络编程 04:TCP连接,客户端与服务器的区别,实现 TCP 聊天及文件上传,Tomcat 的简单使用
java·服务器·网络·tcp/ip·tomcat·端口
David爱编程3 小时前
并发编程常见 Bug 类型全解析:分类与典型案例
java·后端
阿龟在奔跑4 小时前
Spring Security 传统 web 开发场景下开启 CSRF 防御原理与源码解析
java·spring·web安全·java-ee·csrf
xzkyd outpaper4 小时前
为什么不能创建泛型数组?
java·开发语言