Eureka服务发现
2018-12-26 本文已影响23人
java_飞
Eureka服务发现
服务发现概述
- 服务发现机制是为了解决硬网络编码问题,服务消费者使用这种机制获取服务提供者网络信息,当微服务网络地址发生变更(例如IP或端口),会重新注册到服务发现组件,而服务消费者就无须人工修改网络地址了。
- 服务提供者、服务消费者、服务发现之间的关系如下:
- 微服务在启动时,将自己的网络地址等信息注入到服务发现组件中,服务发现组件会存储这些信息
- 服务消费者可以从服务发现组件查询服务提供者的网络地址,并使用该地址调用服务提供者的接口
- 各个微服务与服务发现组件使用一定的机制(心跳)通信,服务组件如长时间无法与某微服务实例通信,就会注销该实例
- 服务发现组件功能:
- 服务注册表:是服务发现组件的核心,用来记录微服务信息,如名称、IP、端口等,提供查询和管理API,注册和注销
- 服务注册与服务发现:服务注册是指服务在启动时将自己信息发送到服务注册组件上,服务发现是指查询可用微服务列表及网络地址的机制
- 服务检查:服务发现组件检测已注册的服务,若某一个服务长时间无法访问则移除该实例
Eureka Demo
pom引入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
启动类
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
application配置
server:
port: 8761 #配置端口
eureka:
client:
register-with-eureka: false #是否向服务端注册自己,它本身就是Eureka Server,所以为false
fetch-registry: false #表示是否从Eureka Server获取信息,因为这是一个单节点,不需要同步其它Eureka Server的数据,所以为 false
service-url:
defaultZone: http://localhost:8761/eureka/ #设置 Eureka Client 与 Eureka Server 同步的地址,注册、查询服务都要使用该地址,多个地址可用逗号分隔
启动服务后,访问 http://localhost:8761/ 则可看到 Eureka 后台
Eureka高可用
1.利用上面的demo,创建两个配置文件:
第一个application-eureka1.yml:
server:
port: 20001
eureka:
instance:
hostname: eureka1
client:
## 是否向注册中心注册自己
register-with-eureka: true
## 是否去检索其他的服务,因为服务注册中心本身的职责就是维护服务实例,它也不需要去检索其他服务
fetch-registry: true
service-url:
defaultZone: http://eureka2:20002/eureka/
第二个application-eureka2.yml:
server:
port: 20002
eureka:
instance:
hostname: eureka2
client:
## 是否向注册中心注册自己
register-with-eureka: true
## 是否去检索其他的服务,因为服务注册中心本身的职责就是维护服务实例,它也不需要去检索其他服务
fetch-registry: true
service-url:
defaultZone: http://eureka1:20001/eureka/
注意:记得在本机电脑host配置文件中配置,eureka1和eureka2的地址映射
192.168.1.214 eureka1
127.0.0.1 eureka2
注意:
1.两个映射必须配置成不一样的,否则在web管理页面将看不到replicas,也就是集群配置无法生效
2.配置文件中register-with-eureka和fetch-registry两个参数必须设置为true,否在集群配置生效但是不可用