Eureka基础知识(服务治理, 服务注册与发现, 两大组件),
单机版Eureka
Eureka基础知识
- SpringCloud封装了Netflix公司开发的Eureka模块来实现服务治理.
- 在传统的rpc远程调用框架中, 管理每个服务与服务之间依赖关系比较复杂, 所以需要服务治理来管理服务与服务之间的依赖关系, 可以实现服务调用, 负载均衡, 容错等, 实现服务注册与发现
- Eureka采用了C/S设计架构, Eureka Server作为服务注册功能的服务器, 它是服务注册中心. 而系统中的其他微服务使用Eureka客户端连接到Eureka Server并维持心跳连接, 这样系统维护人员可通过Eureka来监控系统中各微服务是否正常运行.
- 服务注册与发现中, 有一个注册中心, 当服务器启动的时候, 会把当前自己服务器的信息以别名方式注册到注册中心上, 另一方(如消费者)会以该别名的方式去注册中心上获取到实际的服务通讯地址, 然后再实现本地rpc的远程调用
- 下图是Eureka系统架构
- Eureka Server提供服务与注册
- 各个微服务节点通过配置启动后, 会在EurekaServer中进行注册, 这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息, 服务节点的信息可以在界面中直观看到.
- EurekaClient通过注册中心进行访问
- 是一个Java客户端, 用于简化Eureka Server的交互.
- 客户端同时配备一个内置的, 使用轮循负载算法的负载均衡器.
- 服务启动后, 会向Eureka Server发送心跳(默认周期30秒), 如果Eureka Server在多个心跳周期内都没有接收到某个节点的心跳, 则Eureka Server会把该服务节点从注册表中移除(默认90秒)
单机版Eureka的构建
- IDEA生成Eureka Server端服务注册中心
- 建Module: cloud-eureka-server7001
- 改POM
- 新老对比
<!-- 新版 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- 老版 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
- 写yml
server:
port: 7001
eureka:
instance:
hostname: localhost #eureka服务端的实例名字
client:
register-with-eureka: false #表示不向注册中心注册自己
fetch-registry: false #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
server-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
- 主启动类
//表示该工程是Eureka Server
@EnableEurekaServer
@SpringBootApplication
public class EurekaMain7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7001.class, args);
}
}
- 测试: http://localhost:7001/
- 出现下图网页即可
- cloud-provider-payment8001注册进Eureka Server, 成为服务提供者provider
- 改POM
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 写yml
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:7001/eureka
- 主启动类
//表示这是一个Eureka客户端
@EnableEurekaClient
@SpringBootApplication
public class PaymentMain8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8001.class, args);
}
}
- 测试
- 成功启动服务后, 出现下图即可
- EurekaClient端cloud-consumer-order80注册进入Eureka Server成为服务消费者consumer.
- 改pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 写yml
spring:
application:
name: cloud-order-service
eureka:
client:
register-with-eureka: true # 是否注册进入Eureka Server
fetch-registry: true
service-url:
defaultZone: http://localhost:7001/eureka
- 主启动
@EnableEurekaClient
@SpringBootApplication
public class OrderMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class, args);
}
}
- 注意常出的bug
-
FAILED TO LOAD PROPERTY SOURCE FROM LOCATION 'CLASSPATH:/APPLICATION.YML’
- 一般都是yml配置文件中的缩进没写对