SpringCloud-eureka光速入门
4.1.4.1 在order模块创建 RestTemplate对象
🎈边走、边悟🎈迟早会好 |
Eureka 是 Netflix 开源的一个服务注册和发现工具,主要用于构建分布式系统中的服务发现机制。它在 Spring Cloud 生态系统中广泛使用,尤其在微服务架构中扮演重要角色。
一、Eureka 主要组件
-
Eureka Server:
- 作为服务注册中心,负责管理服务实例的注册和心跳检测。
- 服务实例在启动时向 Eureka Server 注册,并定期发送心跳以保持注册信息的有效性。
- Eureka Server 通常部署为集群,确保高可用性和容错性。
-
Eureka Client:
- 是注册在 Eureka Server 上的服务实例。
- 它可以是任何类型的微服务应用程序,在启动时向 Eureka Server 注册并定期发送心跳。
- Eureka Client 也可以从 Eureka Server 获取其他已注册服务的信息,以实现服务间的调用和负载均衡。
二、工作流程
-
服务注册:
- 服务实例在启动时向 Eureka Server 注册其自身的元数据信息,如 IP 地址、端口号、服务名称等。
-
服务心跳:
- 注册后,服务实例定期向 Eureka Server 发送心跳请求,以表明其仍然活跃。若在一段时间内未收到心跳,Eureka Server 将认为该实例已失效,并将其从注册列表中移除。
-
服务发现:
- 服务调用者(客户端)通过 Eureka Server 查询可用的服务实例列表,以实现服务调用。
- Eureka Client 缓存这些信息,并定期从 Eureka Server 更新,确保负载均衡和高可用性。
-
负载均衡:
- 客户端根据从 Eureka Server 获取的服务实例列表,实现客户端负载均衡。
- 常见的负载均衡策略包括轮询、随机选择、加权轮询等。
三、优势
- 高可用性: Eureka Server 支持集群部署,确保在某些节点故障时系统仍然可用。
- 自我保护机制: 当 Eureka Server 检测到大量客户端失效时,进入自我保护模式,避免因网络分区等原因误判服务失效。
- 易扩展性: 新的服务实例可以动态注册和发现,支持弹性扩展。
Eureka 在 Netflix 的微服务架构中得到了广泛应用,并成为 Spring Cloud 的核心组件之一,用于实现服务注册与发现。
四、Eureka-光速入门【重点
】
4.1 案例准备
4.1.1 创建父工程 tingyi-shop
pom.xml
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.8.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<!-- 版本号是按照伦敦地铁站的名字命名的 -->
<version>Hoxton.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
4.1.2 创建子工程 tingyi-goods
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
引导类
@SpringBootApplication
public class GoodsApplication {
public static void main(String[] args) {
SpringApplication.run(GoodsApplication.class, args);
}
}
application.yml
server:
port: 9001
#指定服务的名称
spring:
application:
name: TINGYI-GOODS
controller编写
@RestController
public class GoodsController {
@RequestMapping("/query")
public String query() {
return "查询商品信息!";
}
}
启动并查看效果
4.1.3 创建子工程 tingyi-order
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot