1 Eureka 单节点搭建

  • pom.xml
  • ``sh org.springframework.cloud spring-cloud-starter-netflix-eureka-server有的教程中还引入spring-boot-starter-web-其实不用。因为上面的依赖已经包含了它。在pom中点此依赖进去-一共点4次spring-cloud-netflix-eureka-server-发现web的依赖。 `

  • application.yml
  • `sh eureka: client: #是否将自己注册到Eureka Server,默认为true-由于当前就是server-故而设置成false-表明该服务不会向eureka注册自己的信息 register-with-eureka: false #是否从eureka server获取注册信息-由于单节点-不需要同步其他节点数据-用false fetch-registry: false #设置服务注册中心的URL-用于client和server端交流 service-url: defaultZone: http://root:root@eureka-7901:7901/eureka/ `

  • 代码
  • `sh 启动类上添加此注解标识该服务为配置中心@EnableEurekaServer `

  • PS:Eureka会暴露一些端点。端点用于Eureka Client注册自身-获取注册表-发送心跳。
  • 简单看一下eureka server控制台-实例信息区-运行环境信息区-Eureka Server自身信息区。
  • 2 整体介绍

  • 背景:在传统应用中-组件之间的调用-通过有规范的约束的接口来实现-从而实现不同模块间良好的协作。但是被拆分成微服务后-每个微服务实例的网络地址都可能动态变化-数量也会变化-使得原来硬编码的地址失去了作用。需要一个中心化的组件来进行服务的登记和管理。
  • 概念:实现服务治理-即管理所有的服务信息和状态。
  • `sh 注册中心相当于买票乘车-只看有没有票(有没有服务)-有就去买票(获取注册列表)-然后乘车(调用)。不必关心有多少火车在运行。 `

  • 注册中心好处:不用关心有多少提供方。
  • 注册中心有哪些:Eureka-Nacos-Consul-Zookeeper等。
  • 服务注册与发现包括两部分-一个是服务器端-另一个是客户端。
  • Server是一个公共服务-为Client提供服务注册和发现的功能-维护注册到自身的Client的相关信息-同时提供接口给Client获取注册表中其他服务的信息-使得动态变化的Client能够进行服务间的相互调用。

    Client将自己的服务信息通过一定的方式登记到Server上-并在正常范围内维护自己信息一致性-方便其他服务发现自己-同时可以通过Server获取到自己依赖的其他服务信息-完成服务调用-还内置了负载均衡器-用来进行基本的负载均衡。

  • 我们课程的Spring Cloud是用Eureka作为服务注册中心。
  • Eureka:是一个RESTful风格的服务-是一个用于服务发现和注册的基础组件-是搭建Spring Cloud微服务的前提之一-它屏蔽了Server和client的交互细节-使得开发者将精力放到业务上。
  • serverA从serverB同步信息-则serverB是serverA的peer。
  • 上面例子中如果service-url为空-且register-with-eureka-fetch-registry为true-则会报错-Cannot execute request on any known server-因为server同时也是一个client-他会尝试注册自己-所以要有一个注册中心url去注册。
  • Netflix开源的组件。包括server和client两部分。
  • `sh https://github.com/Netflix/Eureka `

    3 注册中心和微服务间的关系

    illustration

    11.3.1 client功能

  • 注册:每个微服务启动时-将自己的网络地址等信息注册到注册中心-注册中心会存储(内存中)这些信息。
  • 获取服务注册表:服务消费者从注册中心-查询服务提供者的网络地址-并使用该地址调用服务提供者-为了避免每次都查注册表信息-所以client会定时去server拉取注册表信息到缓存到client本地。
  • 心跳:各个微服务与注册中心通过某种机制(心跳)通信-若注册中心长时间和服务间没有通信-就会注销该实例。
  • 调用:实际的服务调用-通过注册表-解析服务名和具体地址的对应关系-找到具体服务的地址-进行实际调用。
  • 11.3.2 server注册中心功能

  • 服务注册表:记录各个微服务信息-例如服务名称-ip-端口等。
  • 注册表提供 查询API(查询可用的微服务实例)和管理API(用于服务的注册和注销)。

  • 服务注册与发现:注册:将微服务信息注册到注册中心。发现:查询可用微服务列表及其网络地址。
  • 服务检查:定时检测已注册的服务-如发现某实例长时间无法访问-就从注册表中移除。
  • 组件:Eureka , Consul , ZooKeeper-nacos等。

    4 服务注册

    例子:api-listen-order

  • pom.xml
  • `sh org.springframework.cloud spring-cloud-starter-netflix-eureka-client `

  • application.yml
  • `sh #注册中心eureka: client: #设置服务注册中心的URL service-url: defaultZone: http://root:root@localhost:7900/eureka/ `

    ps:不想注册-设置成false即可-实例演示结果:注册中心没有实例信息。找控制台204信息也没有找到。

    `sh spring: cloud: service-registry: auto-registration: enabled: false `

    注册成功:

    `sh DiscoveryClient_API-LISTEN-ORDER/api-listen-order:30.136.133.9:port - registration status: 204 `

    后面源码讲手动注册。

    PS:

    Eureka Server与Eureka Client之间的联系主要通过心跳的方式实现。心跳(Heartbeat)即Eureka Client定时向Eureka Server汇报本服务实例当前的状态-维护本服务实例在注册表中租约的有效性。

    Eureka Client将定时从Eureka Server中拉取注册表中的信息-并将这些信息缓存到本地-用于服务发现。

    5 Eureka高可用

    高可用:可以通过运行多个Eureka server实例并相互注册的方式实现。Server节点之间会彼此增量地同步信息-从而确保节点中数据一致。

  • 注册中心改造
  • application.yml

    参考:#高可用2个节点的yml

    `sh #高可用2个节点#应用名称及验证账号spring: application: name: eureka security: user: name: root password: rootlogging: level: root: debug ---spring: profiles: 7901server: port: 7901eureka: instance: hostname: eureka-7901 client: #设置服务注册中心的URL service-url: defaultZone: http://root:root@eureka-7902:7902/eureka/--- spring: profiles: 7902server: port: 7902eureka: instance: hostname: eureka-7902 client: #设置服务注册中心的URL service-url: defaultZone: http://root:root@eureka-7901:7901/eureka/ `

    —将配置文件分成2段-每段指定spring.profiles。第一段没有指定-所以共用。

  • 服务注册改造
  • api-listen-order

    `sh eureka: client: #设置服务注册中心的URL service-url: defaultZone: http://root:root@eureka-7901:7901/eureka/,http://root:root@eureka-7902:7902/eureka/ `

    写一个地址也行(但是server得互相注册)-EurekaServer会自动同步-但为了避免极端情况-还是写多个。

    集群PS:

    集群中各个se