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**注解
// 添加注解
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**注解
// 添加注解开启服务注册
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**注解
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);