eureka进阶

64 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情

为什么治理

  • 在多个服务之间相互调用的时候比较零散,管理起来比较麻烦。当被调用者有所改动可能都会牵扯到调用者的修改。所以服务治理应运而生。
  • spring cloud的Eureka实现了服务注册、服务调用、负载均衡、容错。这也是服务治理模块通用功能。
  • 服务注册和服务调用在eureka看来都是客户端。eureka服务是服务端。所以他是一种典型的CS架构。eureka客户端需要与eureka服务保持心跳机制。这样eureka服务才会认为客户端没有宕机。

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka调用过程

  • service provider启动时会将自己服务的信息封装后注册到eureka注册中心上。service consumer已provider注册名去注册中心寻找到真实地址并进行调用。
  • 针对service provider的管理对于service consumer来说不需要知道service provider的具体信息。只需要知道service provider的注册名就行了。在我们集群化后也不用担心provider我们具体的调用地址。负载均衡也是eureka帮我分配了。我们客户端只负责接口的调用。

Eureka单机注册

Eureka 单机启动

  • 这里我们不做spring其他的解释,详细请看git分支详细代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  • 在我们新建的项目中pom文件中新增如上gva。就会将eureka服务端功能注入。下面我们只需要添加一些配置启动就行了。
  • 添加依赖后我们在springboot项目中yml中添加如下配置

eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false #表示该模块作为eureka服务,自己是不需要想自己注册的,注册了只是徒增烦恼
    fetch-registry: false # 表示自己就是注册中心。自己是管理者不是被管理者。
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

  • 最后我们在spiringboot启动类上开启eurekaserver就行了。@EnableEurekaServer

  • 能够访问说明我们的eureka服务正常启动。现在没有客户端注册上来。所以现在看到DS Replicas列表是空的。

单机注册

  • 上面我们已经单机启动了eureka服务。下面我们看看服务注册是否可以。我们已之前payment模块为例。
  • pom中添加client坐标
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • yml中填入地址

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7001/eureka

  • 主启动类上添加注解@EnableEurekaClient