SpringCloud简介
Spring Cloud是Spring旗下的项目之一
Spring Cloud并不是一个组件 而是许多组件的集合
其将当下非常流行的一些技术整合到了一起 实现了多个分布式开发中的重要功能
协调了分布式环境中各个系统 并且为各类服务提供模板性的配置
其主要涉及的组件包括:
- Eureka:注册中心
- Zuul或Spring Cloud Gateway:服务网关
- Ribbon:负载均衡
- Feign:服务调用
- Hystrix或Resilience4j:熔断器
【在本篇中 将介绍Eureka注册中心】
Eureka注册中心
在传统的分布式开发中会面临着一个问题:提供服务者需要对外暴露自己的地址 而服务调用者需要记录服务提供者的地址
若地址出现变更 则还需要及时更新 在现在日益复杂的互联网环境 一个项目可能拆分出多个微服务
此时若人为管理地址 不仅开发困难 且在测试 发布上线时都会非常麻烦
而SpringCloud的Eureka组件可以解决该问题
Eureka好比一个中介 其负责管理和记录服务提供者的信息
那么 服务调用者无需自己寻找服务 而是将自己的需求告诉Eureka 然后Eureka会告诉你符合需求的服务地址
同时 服务提供方与Eureka之间通过心跳 (顾名思义 类似于心跳 会定时检测是否存活) 机制进行监控
如此 若当某个服务提供方出现问题 Eureka自然会把其从服务列表中剔除
以此确保了服务的自动注册 发现 状态监控
需要注意的是 Eureka是服务注册中心 仅仅只提供服务注册能力 自身并不提供服务也不消费服务
一、搭建步骤:
1、Eureka服务端
添加Eureka服务端的依赖:
(由于我已在父工程中添加了spring-cloud-dependencies版本管理 因此这里不再配置版本号了)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
在Eureka的服务端的启动类上添加@EnableEurekaServer
注解以声明当前应用为Eureka的服务端:
@SpringBootApplication
// 声明当前应用为Eureka的服务端
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class,args);
}
}
配置文件application.yml:
server:
# 当前服务的端口号
port: 10086
spring:
# 当前应用的名称 便于区分
application:
name: eureka-server
eureka:
client:
service-url:
# 设置Eureka服务的默认地址 需要注意的是后面需带上一个/erueka
# 若为集群 则需指定其它集群的Eureka地址
defaultZone: http://127.0.0.1:10086/eureka
# 当前服务不注册到Eureka 因为当前服务就是Eureka提供者本身 并不提供服务
# 若为集群 该配置则要注释掉 为了让其它Eureka发现该Eureka
register-with-eureka: false
# 不从Eureka拉取服务
fetch-registry: false
2、Eureka服务客户端
服务提供方将服务注册到Eureka以便于调用 服务消费方从Eureka获取地址列表
因此 服务提供方和服务消费方都属于Eureka客户端
服务提供方和服务消费方都需添加Eureka客户端依赖 服务提供方自动将服务注册到EurekaServer服务地址列表 服务消费方使用工具类根据服务名称获取对应的可用的服务地址列表
①、服务提供方:
添加Eureka客户端的依赖:
(由于我已在父工程中添加了spring-cloud-dependencies版本管理 因此这里不再配置版本号了)
<dependency>
<gr