一、微服务注册与发现之Eureka


Eureka简介

  • EurekaNetflix开源的服务发现组件,本身是一个基于 REST 的服务。包含ServerClient两部分。Spring Cloud将它集成在子项目Spring Cloud Netflix中,从而实现微服务的注册与发现。

Eureka架构图

  • Application Service相当于服务提供者。
  • Application Client相当于服务消费者。
  • Make Remote Call可以理解成调用RESTful API的行为。
  • us-east-1c,us-east-1d等都是 zone,它们都是属于us-east-1这个 Region(Spring Cloud默认的 Region 是us-east-1)
Eureka包含两个组件Eureka ServerEureka Client:
  • Eureka Server提供服务发现能力,各个微服务启动时,会向Eureka Server注册自己的信息,Eureka Server存储这些信息。
  • Eureka Client是一个 Java 客户端,用于简化和Eureka Server的交互。
  • 微服务启动后,会周期性(默认 30s)地向Eureka Server发送心跳以续约自己的租期。
  • 如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将注销该实例(默认 90s)。
  • 默认情况下,Eureka Server同时也是Eureka Client。多个Eureka Server实例相互之间通过复制的方式来实现微服务注册表中数据的同步。
  • Eureka Client会缓存服务注册表中的信息,这种方式有一定的优势——首先,微服务无需每次请求都查询Eureka Server,从而降低Eureka Server的压力;其次,即使Eureka Server所有节点宕机,服务消费者依然可以使用缓存中的信息找到服务提供者并完成调用。

创建单机Eureka Server

  1. 创建 Maven 工程,pom文件添加已下依赖:
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>
  1. 在配置文件application.yml中添加:
server:
  port: 8761
eureka:
  client:
    # 表明是否将自己注册到Eureka Server中,默认为true。由于当前应用为Eureka Server,设为false。
    registerWithEureka: false
    # 表示是否从Eureka Server获取注册信息,默认为true,由于这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点数据,设为false。
    fetchRegistry: false
    # 设置与Eureka Server交互的地址,查询服务个注册服务都需要依赖这个地址。多个地址间可使用,分隔。
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  1. 创建启动类,添加@EnableEurekaServer注解声明是一个Eureka Server
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryEurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(DiscoveryEurekaApplication.class, args);
    }
}

Eureka Server

将微服务注册到Eureka Server

  1. pom文件中添加依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 在配置文件application.yml中添加:
spring:
  application:
    # 指定注册到Eureka Server上的应用名称
    name: microeservice-provider-user

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
    instance:
      # 表示将自己的IP注册到Eureka Server
      prefer-ip-address: true
  1. 创建启动类。
@SpringBootApplication
public class ProviderUserApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderUserApplication.class, args);
    }
}
  • Spring Cloud Edgware之前,要想将微服务注册到Eureka Server,必须在启动类上添加@EnableEurekaClient@EnableDiscoverClient。在Spring Cloud Edgware以及更高版本,只需添加相关依赖,即可自动注册。
  • 若不想讲服务注册到Eureka Server,只需设置spring.cloud.service-register.auto-registration.enabled=false,或@EnableDiscoveryClient(autoRegister = false)即可。
    Eureka Server

Eureka Server的高可用

  1. 修改配置文件application.yml:
spring:
  application:
    name: microservice-discovery-eureka-ha
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
---
spring:
  # 指定profile=peer1
  profiles: peer1
server:
  port: 8761
---
spring:
  profiles: peer2
server:
  port: 8762
  1. IDEA启动两个 Configurations,Program arguments分别设置--spring.profiles.active=peer1--spring.profiles.active=peer2

peer1
peer2


该文章摘自《Spring Cloud 与 Docker 微服务架构实战(第二版)》

以上


文章作者: Qliang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Qliang !
评论
 上一篇
二、微服务客户端负载均衡之Ribbon 二、微服务客户端负载均衡之Ribbon
Ribbon简介 Ribbon是Netflix发布的负载均衡器,它有助于控制 HTTP 和 TCP 的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们
2019-01-17
下一篇 
闲置服务器挂eBesucher 闲置服务器挂eBesucher
关于eBesucherebesucher 是德国目前最著名的自动冲浪赚钱站,该站最低提现金额PAYPAL2 欧元,此站除了可以通过挂广告网站,还可以通过邮件交换的方式来赚取 BTP。换算方式:10000BTP=2€。 原因去年年底购买的腾讯
2018-07-18
  目录