eureka 注册中心

使用场景

在微服务架构中由于服务很多,彼此之间存在各种相互调用,所以各个服务的访问地址查询管理以及多副本的负载均衡问题就出现了,在传统架构中通常可以用nginx 来解决此问题,由于微服务众多,如果用nginx 就会涉及很多问题比如通用一套nginx 不同服务就需要不同域名区分,管理很多域名,配置域名解析,配置代理转发,后端地址变了手动更新配置,nginx 为了高可用需要多节点,可能还要在前面配置lvs 等。

在java 的微服务sqpring cloud 中提供了一个注册中心eureka 注册、服务发现、负载均衡,如果仅仅是java 项目互相之间的访问没有用到复杂的配置只是ip+port 的访问,那么就可以使用eureka 

区别与使用情况

1、注册中心作为微服务架构中的核心功能,其重要性不言而喻。所以单机版的Eureka Server在可靠性上并不符合使用要求,集群版的Eureka Server才是实际使用中的选择。
  

2、Eureka Server注册中心的集群和Dubbo的ZooKeeper注册中心集群在结构上有很大的不同,ZooKeeper注册中心集群搭建后,集群中各节点呈现主从关系,集群中只有主节点对外提供服务的注册和发现功能,从节点相当于备份节点,只有主节点宕机时,从节点会选举出一个新的主节点,继续提供服务的注册和发现功能。而Eureka Server注册中心集群中每个节点都是平等的,集群中的所有节点同时对外提供服务的发现和注册等功能

Eureka组件

Eureka Server
1、Eureka Server提供服务注册和服务发现,各个客户端启动后,会主动在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在后台界面中直观的看到。客户端作为        消费者访问其他服务对于其他服务地址通过eureka server 请求得到的
2、集群中每个Eureka Server节点一个微服务,也就是说,每个节点都可以在集群中的其他节点上注册当前服务。又因为每个节点都是注册中心,所以节点之间又可以相互注册当前节点中已注册的服务,并发现其他节点中已注册的服              务。Eureka Server注册中心集群中每个节点都是平等的,集群中的所有节点同时对外提供服务的发现和注册等功能。


Eureka Client(也就是应用服务)
1、每个后端java 应用会添加相应的代码来集成Eureka 客户端,通过配置文件配置的注册中心地址,服务启动后就会主动注册继而本地变成一个eureka 的客户端
2、Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server        在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。

配置

Eureka Server
配置就在java应用的application-xxx.properties 中

#eurekaserver1配置
spring.application.name=eureka-server
server.port=8761
# 设置eureka实例名称,建议与配置文件的变量相同,必须和Linux系统域名相同
eureka.instance.hostname=eurekaserver1
# 设置服务注册中心地址,指向另一个注册中心,使用域名作为访问路径
eureka.client.serviceUrl.defaultZone=http://eurekaserver2:8761/eureka/

#eurekaserver2配置
spring.application.name=eureka-server
server.port=8761
eureka.instance.hostname=eurekaserver2
eureka.client.serviceUrl.defaultZone=http://eurekaserver1:8761/eureka/
View Code

Eureka client
配置就在java应用的application-xxx.properties 中

spring.application.name=asdf-xxx
server.port=10000
eureka.server.port=10888
eureka.client.serviceUrl.defaultZone=http://192.168.5.38:${eureka.server.port}/eureka/,http://192.168.6.38:${eureka.server.port}/eureka/
eureka.instance.hostname=${spring.cloud.client.ip-address}
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000
eureka.instance.lease-expiration-duration-in-seconds=30
eureka.instance.lease-renewal-interval-in-seconds=10
View Code

运行过程

每个后端应用既是消费者也是生产者,例如A B 两个应用,两个应用都是eureka 的客户端,主动注册定期上报自己的连接信息。当A 请求B 时候,A 角色就是消费者,B 就是生产者A 首先会通过配置的一个B服务的服务名去注册中心的其中一个节点请求B的地址,请求后会把这些地址列表缓存在本地,即使注册中心宕机由于本地有缓存也不会影响访问。而通常情况服务都是都副本,也就是有多个地址存储在server端,所以eureka 就实现了负载均衡的作用。

eureka server 控制台

http://192.168.5.38:port 端口为server 配置文件中配置的,ip 为其中一个节点即可

注册中心下线

发版过程中一般都会在给当前服务版本迭代的时候先在注册中心下线,此操作一般都是通过向本地的eureka 客户端发送下线请求然后客户端再去server 发送相应指令而不是直接向server 请求,

原文地址:https://www.cnblogs.com/fanggege/p/12553979.html