首页 新能源汽车

告别玄学!Spring Cloud Eureka 注册中心三步搞定:服务注册与发现详解

字数: (7166)
阅读: (6577)
内容摘要:告别玄学!Spring Cloud Eureka 注册中心三步搞定:服务注册与发现详解,

在微服务架构中,服务注册与发现是至关重要的环节。如果你的服务像无头苍蝇一样乱窜,那整个系统将会变得难以维护,甚至崩溃。本文将带你快速入门 Spring Cloud Eureka,用最简单的方式搭建注册中心,并实现服务的注册与发现,彻底告别服务寻址的玄学问题。特别是当服务实例需要动态伸缩,或者IP地址经常变化时, [特殊字符]? 如何优雅的处理服务注册显得格外重要。

Eureka:注册中心的核心

Eureka 是 Spring Cloud Netflix 组件中的服务注册与发现组件,它提供了服务注册、服务发现、健康检查等功能。我们可以把它想象成一个电话簿,服务提供者将自己的信息(比如服务名称、IP地址、端口号)注册到 Eureka Server,服务消费者则从 Eureka Server 获取服务提供者的信息,然后就可以进行远程调用了。

Eureka Server 搭建

首先,创建一个 Spring Boot 项目,并引入 Eureka Server 的依赖:

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

然后在 application.yml 文件中配置 Eureka Server:

告别玄学!Spring Cloud Eureka 注册中心三步搞定:服务注册与发现详解
server:
  port: 8761 # Eureka Server 端口

eureka:
  instance:
    hostname: localhost # Eureka Server 主机名
  client:
    register-with-eureka: false # 不向自己注册
    fetch-registry: false # 不从自己拉取注册信息

最后,在 Spring Boot 启动类上添加 @EnableEurekaServer 注解,启动 Eureka Server:

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);
    }
}

启动成功后,访问 http://localhost:8761 即可看到 Eureka Server 的管理界面。

服务注册:让服务被发现

创建一个 Spring Boot 项目,作为服务提供者,并引入 Eureka Client 的依赖:

告别玄学!Spring Cloud Eureka 注册中心三步搞定:服务注册与发现详解
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

application.yml 文件中配置服务提供者的信息:

spring:
  application:
    name: service-provider # 服务名称

server:
  port: 8080 # 服务端口

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/ # Eureka Server 地址

在 Spring Boot 启动类上添加 @EnableDiscoveryClient 注解,启动服务提供者:

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

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProviderApplication {

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

启动成功后,刷新 Eureka Server 的管理界面,即可看到服务提供者已经注册到 Eureka Server 上了。

告别玄学!Spring Cloud Eureka 注册中心三步搞定:服务注册与发现详解

服务发现:找到服务并调用

创建一个 Spring Boot 项目,作为服务消费者,并引入 Eureka Client 和 RestTemplate 的依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

application.yml 文件中配置服务消费者的信息:

spring:
  application:
    name: service-consumer # 服务名称

server:
  port: 8081 # 服务端口

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/ # Eureka Server 地址

在 Spring Boot 启动类上添加 @EnableDiscoveryClient 注解,并创建一个 RestTemplate Bean:

告别玄学!Spring Cloud Eureka 注册中心三步搞定:服务注册与发现详解
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.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceConsumerApplication {

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

    @Bean
    @LoadBalanced //开启负载均衡
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

创建一个 Controller,使用 RestTemplate 调用服务提供者的接口:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ServiceConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/consumer")
    public String consumer() {
        // service-provider 是服务提供者的名称
        String result = restTemplate.getForObject("http://service-provider/provider", String.class);
        return "Consumer -> " + result;
    }
}

服务提供者提供一个简单的接口:

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

@RestController
public class ServiceProviderController {

    @GetMapping("/provider")
    public String provider() {
        return "Provider";
    }
}

启动成功后,访问 http://localhost:8081/consumer 即可看到服务消费者成功调用了服务提供者的接口。

实战避坑经验总结

  • 服务名大小写敏感:在服务注册和服务发现时,服务名的大小写必须一致,否则会导致服务无法找到。
  • 健康检查配置:Eureka 默认会进行健康检查,如果服务无法正常响应,Eureka 会将其从服务列表中移除。可以通过配置 eureka.instance.health-check-intervaleureka.instance.lease-renewal-interval-in-seconds 来调整健康检查的频率。
  • 负载均衡策略:使用 Ribbon 进行负载均衡时,可以配置不同的负载均衡策略,例如轮询、随机、权重等。可以在 application.yml 文件中配置 service-provider.ribbon.NFLoadBalancerRuleClassName 来选择不同的负载均衡策略。
  • [特殊字符]? 特别是有些特殊字符,在yml文件中作为key时,需要格外小心,最好用引号包起来,避免出现解析错误的情况。如果出现解析错误,服务注册就可能失败。

通过以上三步,你就可以快速搭建 Spring Cloud Eureka 注册中心,并实现服务的注册与发现。希望本文能够帮助你更好地理解和使用 Eureka,构建稳定可靠的微服务架构。在实际生产环境中,还需要考虑高可用、安全性、监控等方面,才能更好地保障系统的稳定运行。

告别玄学!Spring Cloud Eureka 注册中心三步搞定:服务注册与发现详解

转载请注明出处: 代码一只喵

本文的链接地址: http://m.acea2.store/blog/295491.SHTML

本文最后 发布于2026-04-16 06:19:38,已经过了11天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 重庆小面 2 天前
    讲的真不错,简单易懂,按照步骤操作,一次就成功了!避免了自己摸索的时间。
  • 社畜一枚 6 天前
    感谢分享! 之前遇到过服务名大小写不一致的问题,导致服务一直无法注册,看了这篇文章才知道是这个问题。
  • 社恐患者 2 天前
    感谢分享! 之前遇到过服务名大小写不一致的问题,导致服务一直无法注册,看了这篇文章才知道是这个问题。