Eureka基础知识
前面我们没有服务注册中心,也可以服务间调用,为什么还要服务注册?
当服务很多时,单靠代码手动管理是很麻烦的,需要一个公共组件,统一管理多服务之间的相互调用。
Eureka用于服务注册,目前官网已经停止更新。
什么是服务治理
SpringCloud 封装了 Netflix 公司开发的Eureka模块来实现服务治理
在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,所以需要使用服务治理,
管理服务与服务之间依赖关系,可以实现服务调用,负载均衡,容错等,实现服务发现与注册。
n个生产者和n个消费者之间相互调用。
什么是服务注册与发现
如果你的服务注册中心只有一台机器,那么只要它一宕机,就会产生单点故障。
所以一般服务注册中心能配多个就配多个,主要就是为了避免单点故障。
Eureka的两个组件
1. Eureka Server:提供服务注册的服务。
各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册
表将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。
2. Eureka Client:微服务通过其和Eureka Server保持通信。
它是一个Java客户端,用于简化微服务和EurekaServer的交互。客户端同时也具备一个内置的,
使用轮询(round-robin)负载算法的负载均衡器。
在应用启动后,将会向EurekaServer发送心跳(默认周期30s)。如果EurekaServer在多个心跳
周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90s)。
单机Eureka构建步骤
改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-netflix-eureka-client</artifactId>
</dependency>
添加依赖
<!--eureka server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
写yml
Eureka服务器 请求地址:
http://${eureka.instance.hostname}:${server.port}/eureka/
http:/localhost:7001/eureka/
server:
port: 7001
eureka:
instance:
hostname: localhost
client:
# false表示不向注册中心注册自己(中介不用注册了)
register-with-eureka: false
# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
service-url:
# 设置Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
主启动类
注意开启注解:@EnableEurekaServer
指明该模块作为Eureka注册中心的服务器。
@EnableEurekaServer
@SpringBootApplication
public class EurekaMain7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7001.class, args);
}
}
测试
启动,发送http://localhost:7001/ 请求
微服务注册
3.1 生产者微服务8001注册EurekaServer
1改POM
添加一个Eureka-Client依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2. 改yml:添加如下配置
eureka:
client:
# 表示将自己注册进EurekaServer默认为true
register-with-eureka: true
# 表示可以从Eureka抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
fetch-registry: true
service-url:
defaultZone: http://localhost:7001/eureka
3. 修改主启动类
3. 修改主启动类
添加注解:@EnableEurekaClient。
指明这是一个Eureka客户端,要注册进EurekaServer中。
@SpringBootApplication
@EnableEurekaClient
public class PaymentMain8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8001.class, args);
}
}
4. 测试
启动Payment8001模块:
发现我们的8001服务注册进来了。
红色字体是Eureka的自我保护机制,后面再详细说。
注意:注册进来的服务名,就是我们在该服务yml文件中配置的微服务名