文章目录
- 一、初识Eureka
- 1.1 EurekaServer
- 1.2 EurekaClient
- 1.2.1 EurekaClient中的角色
- 二、EurekaServer
- 2.1 搭建EurekaServer
- 2.1.1 依赖引入
- 2.1.2 添加注解
- 2.1.3 配置eureka地址
- 2.1.4 验证
- 2.2 注册EurekaClient
- 2.2.1 引入客户端依赖
- 2.2.2 配置eureka地址
- 2.2.3 验证
- 2.3 服务发现
一、初识Eureka
Eureka是Netflix开源的一个服务发现框架,用于管理分布式系统中的各个服务实例,使得服务消费者可以方便地发现和调用服务提供者。Eureka架构由两个组件构成,一个是服务注册中心(EurekaServer),另一个是服务提供者(EurekaClient)。
EurekaServer
和EurekaClient
之间的通信使用的是基于REST的协议,使得服务消费者可以轻松地与服务提供者通信。
1.1 EurekaServer
EurekaServer是一个集中式的组件,用于管理服务实例的注册和注销。当一个服务启动时,它会向EurekaServer注册自己的信息,包括服务名称、IP地址、端口号等。EurekaServer会将这些信息保存在一个注册表中,以便服务消费者可以查询到可用的服务实例。服务实例会定期向EurekaServer发送心跳包,以便EurekaServer可以了解服务实例的运行状况,如果某个服务实例长时间没有发送心跳包,EurekaServer就会将其从注册表中删除。
1.2 EurekaClient
EurekaClient是一个服务提供者,当服务提供者启动时,它会向EurekaServer注册自己提供的服务。同时,EurekaClient还会定期从EurekaServer获取可用的服务实例列表,并缓存这些实例的信息。当服务消费者需要调用服务时,它会向EurekaServer发送一个服务请求,并得到可用的服务实例列表。然后服务消费者根据负载均衡算法选择一个服务实例进行调用。
1.2.1 EurekaClient中的角色
在Eureka架构中,服务提供者使用EurekaClient向服务注册中心(EurekaServer)注册自己提供的服务,并且将自己的服务实例信息保存到注册表中。服务消费者也使用EurekaClient从服务注册中心获取可用的服务实例列表,并根据负载均衡算法选择一个服务实例进行调用。
服务提供者和服务消费者可以分别被称为EurekaClient的provider
和consumer
。
作为provider,服务提供者需要在启动时向EurekaServer注册自己提供的服务,并且将自己的服务实例信息保存到注册表中。EurekaClient提供了一些配置选项,使得服务提供者可以轻松地完成这些操作。服务提供者还需要提供API接口来响应服务调用请求。
作为consumer,服务消费者需要使用EurekaClient从服务注册中心获取可用的服务实例列表,并根据负载均衡算法选择一个服务实例进行调用。EurekaClient提供了一些负载均衡策略,例如随机、轮询、加权轮询等。服务消费者还需要根据具体业务需求,调用相应的API接口来完成服务调用。
需要注意的是,EurekaClient的provider和consumer不是指具体的服务提供者和服务消费者,而是指向EurekaServer注册服务和从EurekaServer获取服务实例列表的客户端。实际上,一个服务既可以是provider,也可以是consumer,它可以向EurekaServer注册自己提供的服务,并且使用EurekaClient从其他服务提供者获取可用的服务实例列表。
二、EurekaServer
2.1 搭建EurekaServer
2.1.1 依赖引入
在pom.xml文件中引入对应依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.1.2 添加注解
创建一个@EnableEurekaServer
注释的Spring Boot配置类,以启用Eureka Server。
package com.caterpillar.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
2.1.3 配置eureka地址
在配置文件夹创建一个yml文件:
server:
port: 8888
spring:
application:
name: eurekaserver
eureka:
client:
service-url:
defaultZone: http://localhost:8888/eureka
2.1.4 验证
启动服务后可以通过访问地址进行查阅,例如:
(访问http://localhost:8888)
显示此页面表示成功搭建。
2.2 注册EurekaClient
2.2.1 引入客户端依赖
在pom.xml文件中引入对应依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.2.2 配置eureka地址
在yml配置中添加eureka地址:
spring:
application:
name: userserver
eureka:
client:
service-url:
defaultZone: http://localhost:8888/eureka
2.2.3 验证
启动服务后可以通过访问地址进行查阅,例如:
(访问http://localhost:8888)
可以看到userservice注册成功。
2.3 服务发现
-
实现服务发现,需要搭建服务注册中心并让服务提供方进行注册(2.1、2.2)配置。
-
添加@LoadBalanced(负载均衡)注解:
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
- 通过注册的名称进行服务发现并使用:
@Autowired
private OrderMapper orderMapper;
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
//利用RestTemplate发起http请求,使用userservice
String url = "http://userservice/user/" + order.getUserId();
User user = restTemplate.getForObject(url,User.class);
order.setUser(user);
// 4.返回
return order;
}