在 Eureka 架构中,微服务角色有两类:
记录服务信息
心跳监控
Provider :服务提供者,例如案例中的 user-service
注册自己的信息到 EurekaServer
每隔 30 秒向 EurekaServer 发送心跳
consumer :服务消费者,例如案例中的 order-service
根据服务名称从 EurekaServer 拉取服务列表
基于服务列表做负载均衡,选中一个微服务后发起远程调用
架构图:

常见问题:
服务提供者启动时向 eureka 注册自己的信息
eureka 保存这些信息
消费者根据服务名称向 eureka 拉取提供者信息
服务消费者利用负载均衡算法,从服务列表中挑选一个
服务提供者会每隔 30 秒向 EurekaServer 发送心跳请求,报告健康状态
eureka 会更新记录服务列表信息,心跳不正常会被剔除
消费者就可以拉取到最新的信息
1. 创建项目,引入 spring-cloud-starter-netflix-eureka-server 的依赖:
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
- dependency>
2. 编写启动类,添加 @EnableEurekaServer 注解
3. 添加 application.yml 文件,编写下面的配置:
- server:
- port: 10086
- spring:
- application:
- name: eurekaserver
- eureka:
- client:
- service-url:
- defaultZone: http://127.0.0.1:10086/eureka/
启动后访问管理页面http://127.0.0.1:10086:

1. 分别 user-service 和 order-service 项目中引入 spring-cloud-starter-netflix-eureka-client 的依赖
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
- dependency>
2. 在 application.yml 文件,分别编写下面的配置:
- spring:
- application:
- name: userservice #orderservice
- eureka:
- client:
- service-url:
- defaultZone: http://127.0.0.1:10086/eureka/
这里还可以通过复制userService配置 修改VM:-Dserver.port=8082,模拟一个服务启动多个实例:

下面以在 order-service 服务中拉取 user-service中的查询用户信息接口为例:
1、用服务提供者的 服务名称 远程调用服务接口:
String url = "http://userservice/user/" + order.getUserId();
2、给 RestTemplate 添加 @LoadBalanced 注解(实现多示例负载均衡)
- @Bean
- @LoadBalanced
- public RestTemplate restTemplate() {
- return new RestTemplate();
- }