# Eureka 注册中心
# 服务调用出现的问题
- 服务消费者该如何获取服务提供这的地址信息?
- 如果有多个服务提供者,消费者该如何选择?
- 消费者如何得知服务提供这的健康状态?
# Eureka 的作用
- 消费者该如何获取服务提供者的具体信息?
- 服务提供者启动时向 Eureka 注册自己的信息
- eureka 保存这些信息
- 消费者根据服务名称向 eureka 拉取提供者信息
- 如果有多个服务提供者,消费者该如何选择?
- 服务消费者利用负载均衡算法,从服务列表中挑选一个
- 消费者该如何感知服务提供者健康状态?
- 服务提供者会每 30 秒向 EurekaServer 发送心跳请求,报告健康状态
- eureka 会更新服务列表信息,心跳不正常会被剔除
- 消费者就可以拉取到最新的信息
# 搭建 Eureka 服务注册中心
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
编写启动类,并在启动类添加 **@EnableEurekaServer** 注解
@SpringBootApplication
@EnableEurekaServer // 添加注解
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class);
}
}
配置文件上添加 eureka 服务器地址信息
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka #注册中心地址
# 搭建 Eureka 客户端中心
引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
编写启动类,并在启动类上添加 **@EnableEurekaClient** 注解
@MapperScan("cn.itcast.user.mapper")
@SpringBootApplication
@EnableEurekaClient // 添加注解开启服务注册
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}
配置文件上写明 Eureka 服务端的地址信息
spring:
application:
name: userservice # user 服务的名称
## eureka 服务中心
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
# Eureka 服务发现 / 拉取
前提:完成 Eureka 服务端和 Eureka 客户端的搭建,并且服务中心可以看到这些注册到 Eureka 的服务
在原来 RestTemplate 上加入 **@LoadBalanced** 注解
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
将原来使用 RestTemplate 发送 http 请求时写入的 ip 地址替换成 eureka 服务端中的服务名,即 spring.application.name 字段的名称
// 2. 利用 restTemplate 发起 http 请求,查询用户 这里原来是 ip 地址,替换成服务名称
String url = "http://userservice/user/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);