SpringColud Eureka的服务注册与发现(1)

简介: SpringColud Eureka的服务注册与发现

一、Eureka简介

本文中所有代码都会上传到git上,请放心浏览

项目git地址:https://github.com/839022478/Spring-Cloud

在传统应用中,组件之间的调用,通过有规范的约束的接口来实现,从而实现不同模块间良好的协作。但是被拆分成微服务后,每个微服务实例的网络地址都可能动态变化,数量也会变化,使得原来硬编码的地址失去了作用。需要一个中心化的组件来进行服务的登记和管理,为了解决上面的问题,于是出现了服务治理,就是管理所有的服务信息和状态,也就是我们所说的注册中心


1.1 注册中心


比如我们去做火车或者汽车,需要去买票乘车,只看我们有没有票(有没有服务),有就去买票(获取注册列表),然后乘车(调用),不用关心到底有多少车在运行

流程图:

image.png


使用注册中心,我们不需要关心有多少提供方,只管去调用就可以了,那么注册中心有哪些呢?


注册中心:Eureka,Nacos,Consul,Zookeeper


本文中讲解的是比较火热的Spring Cloud微服务下的Eureka,Eureka是Netflix开发的服务发现框架,是一个RESTful风格的服务,是一个用于服务发现和注册的基础组件,是搭建Spring Cloud微服务的前提之一,它屏蔽了Server和client的交互细节,使得开发者将精力放到业务上。


服务注册与发现主要包括两个部分:服务端(Eureka Server)和客户端(Eureka Client)


服务端(Eureka Server): 一个公共服务,为Client提供服务注册和发现的功能,维护注册到自身的Client的相关信息,同时提供接口给Client获取注册表中其他服务的信息,使得动态变化的Client能够进行服务间的相互调用。


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


Eureka GIt官网:https://github.com/Netflix/Eureka


1.3 服务注册与发现


服务注册与发现关系图:

image.png


1.2 client功能和server功能


1.2.1 client功能


注册:每个微服务启动时,将自己的网络地址等信息注册到注册中心,注册中心会存储(内存中)这些信息。

获取服务注册表:服务消费者从注册中心,查询服务提供者的网络地址,并使用该地址调用服务提供者,为了避免每次都查注册表信息,所以client会定时去server拉取注册表信息到缓存到client本地。

心跳:各个微服务与注册中心通过某种机制(心跳)通信,若注册中心长时间和服务间没有通信,就会注销该实例。

调用:实际的服务调用,通过注册表,解析服务名和具体地址的对应关系,找到具体服务的地址,进行实际调用。

1.2.2 server注册中心功能


服务注册表:记录各个微服务信息,例如服务名称,ip,端口等。

注册表提供 查询API(查询可用的微服务实例)和管理API(用于服务的注册和注销)。

服务注册与发现:注册:将微服务信息注册到注册中心。发现:查询可用微服务列表及其网络地址。

服务检查:定时检测已注册的服务,如发现某实例长时间无法访问,就从注册表中移除。

二、Eureka单节点搭建


2.1 pom.xml


在有的教程中,会引入spring-boot-starter-web,这个依赖其实不用,因为spring-cloud-starter-netflix-eureka-server的依赖已经包含了它,在pom依赖进去,就可以了


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>


2.2 application.yml

server:
  port: 8500
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://localhost:8080/eureka/

2.3 服务端启动类

启动类上添加此注解标识该服务为配置中心

@EnableEurekaServer

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

2.4 启动


我们启动EurekaDemoApplication,然后在浏览器中输入地址 http://localhost:8500/,就可以启动我们的 Eureka 了,我们来看下效果,出现了这个画面,就说明我们已经成功启动~,只是此时我们的服务中是还没有客户端进行注册


image.png

三、服务注册


注意:在客户端pom里面我们需要加上spring-boot-starter-web,否则服务是无法正常启动的


3.1 pom.xml

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>


3.2 application.yml


#注册中心
eureka:
  client:
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://localhost:8500/eureka/
  #服务名
  instance:
    appname: mxn


3.3 客户端启动类


在客户端启动类中我们需要加上 @EnableDiscoveryClient注解


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}


3.4 查看效果


工程启动后,刷新http://localhost:8500/页面,我们可以发现服务注册成功了


image.png

并且我们可以在idea日志打印中看到DiscoveryClient_MXN/DESKTOP-5BQ3UK8 - registration status: 204,说明就是注册成功了

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


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


四、Eureka 端点


官网地址:https://github.com/Netflix/eureka/wiki/Eureka-REST-operations


Eureka服务器还提供了一个端点(eureka/apps/{applicaitonName})可以查看所注册的服务详细信息 。applicaitonName就是微服务的名称,比如这里我们访问 http://localhost:8500/eureka/apps/mxn


image.png

目录
相关文章
|
2月前
|
Java Nacos Maven
Eureka服务注册与发现
本节读者带领大家完成SpringCloud集成组件Eureka的开发、部署,并完成业务应用在Eureka的注册、访问。基于此细心的读者朋友们可以发现:上一章节还写死的访问地址,已经变成动态从注册中心获取了,避免了接口提供方注册信息变更、导致消费方接口服务调用异常的场景。随着Eureka的剔除,Nacos又将如何优雅替换Eureka呢?待我们后续继续实操逐步发掘吧。
|
4月前
|
微服务
springCloud之服务注册与发现Eureka
springCloud之服务注册与发现Eureka
|
5月前
|
缓存 负载均衡 算法
Eureka——服务注册与发现框架
Eureka——服务注册与发现框架
|
5月前
|
负载均衡 监控 容灾
【SpringCloud】详解Eureka注册中心
【SpringCloud】详解Eureka注册中心
101 0
|
缓存 Java Shell
SpringCloud Eureka注册中心
SpringCloud Eureka注册中心
75 1
|
12月前
|
存储 Java 网络架构
SpringCloud之Eureka注册中心解读
SpringCloud之Eureka注册中心解读
|
Java Maven
把提供者注册到Eureka
上一篇已经记录了搭建Eureka的方法:搭建Eureka注册中心 创建一个maven项目 添加依赖
|
负载均衡 监控 Dubbo
SpringCloud之Eureka服务注册
SpringCloud之Eureka服务注册
SpringCloud之Eureka服务注册
SpringCloud - 服务注册与发现(Eureka)(二)
SpringCloud - 服务注册与发现(Eureka)(二)
125 0
SpringCloud - 服务注册与发现(Eureka)(二)
|
Java
SpringCloud - 服务注册与发现(Eureka)(一)
SpringCloud - 服务注册与发现(Eureka)(一)
127 0
SpringCloud - 服务注册与发现(Eureka)(一)