71

spring-cloud之注册中心eureka

 5 years ago
source link: https://blog.luhuancheng.com/2019/03/29/spring-cloud之注册中心eureka/?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在传统的应用架构里,一般通过nginx的反向代理来对外暴露后端服务,来支持负载均衡、高可用。用过的人都懂,一旦部署的后端服务更换了服务器或者端口,都需要我们修改nginx的配置。当然在传统的应用架构里边,这个无可厚非,毕竟服务数量不多,而且变动不频繁。但是来到了微服务架构后,可能就涉及到几十个以上的服务了。每个服务都需要进行类似的配置方式,这样不便于管理、而且容易出错。

spring-cloud中提供了eureka注册中心,为我们解决了以上的问题。服务提供者只需要在启动时,将自身的信息注册到eureka中,eureka会返回注册到其上的服务列表,并维持心跳;当服务有变动时,通过事件通知机制告知客户端(即注册到eureka上的服务)刷新服务列表。这样我们就可以借助eureka来取缔nginx,而且无需维护反向代理的配置。

AvYjQ33.png!web

使用eureka集群

由于eureka没有后端存储,所有服务数据都处于内存中。因此在生产环境中,需要使用eureka集群。一般有三个节点,两两互相注册,互相同步服务数据,以此保证高可用。

配置

```yaml
---
spring:
  profiles: peer1
  application:
    name: eureka-server
server:
  port: 8761
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://peer1:8761/eureka/,http://peer2:8761/eureka/,http://peer3:8761/eureka/
  instance:
    prefer-ip-address: true # 以ip地址注册,默认为主机名
---
spring:
  profiles: peer2
  application:
    name: eureka-server
server:
  port: 8762
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://peer1:8761/eureka/,http://peer2:8761/eureka/,http://peer3:8761/eureka/
  instance:
    prefer-ip-address: true # 以ip地址注册,默认为主机名
---
spring:
  profiles: peer3
  application:
    name: eureka-server
server:
  port: 8763
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://peer1:8761/eureka/,http://peer2:8761/eureka/,http://peer3:8761/eureka/
  instance:
    prefer-ip-address: true # 以ip地址注册,默认为主机名

服务注册与发现

服务发现是基于微服务的体系结构的关键原则之一,spring cloud是如何做到服务注册和发现的呢?

当服务启动时,eureka客户端(即配置了注册eureka的服务)向eureka集群服务提供元数据(host、port、health indicator url、home page etc.)将自身注册到eureka集群中。而且eureka集群会收到来自每个服务的心跳信息,如果心跳超过了配置的时间未刷新,那么这个服务实例就会从服务注册表中删除,并通知其他eureka客户端。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK