开发者社区> auqbllxiu> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Spring Cloud Eureka 详述(一)(上)

简介: Spring cloud eureka是Spring cloud netfilx中的一部分,它基于Netflix Eureka做了二次封装,主要职责完成Eureka 中的服务治理功能
+关注继续查看

服务治理: Spring Cloud Eureka

服务治理: Spring Cloud Eureka一、简介二、 功能概述服务治理Netflix Eureka搭建服务注册中心注册服务提供者高可用配置中心服务发现与消费


一、简介

Spring cloud eurekaSpring cloud netfilx中的一部分,它基于Netflix Eureka做了二次封装,主要职责完成Eureka 中的服务治理功能

本篇主要探讨如下:

  • 服务治理和Eureka简介
  • 构建服务注册中心
  • 服务注册与服务发现
  • Eureka 基础架构
  • Eureka 的服务治理机制
  • Eureka 的配置


二、 功能概述

服务治理

服务治理可以是说微服务架构中最为核心的基础模块,它主要用来实现各个微服务实现的自动化注册与发现。在开始的时候微服务系统的服务可能并不多,我们需要一些配置来完成服务的调用。


  • 服务注册: 在服务治理框架中,通常会构建一个注册中心,由各个服务提供者来向注册中心登记并提供服务,将主机与端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按照服务名分类组织服务清单。
服务名位置
服务A192.168.1.101:8000, 192.168.1.102:8000
服务B192.168.1.103:9000,192.168.1.104:9000,192.168.1.105:9000

比如我们有两个提供服务A 的进程分别位于192.168.1.101:8000, 192.168.1.102:8000 上,另外还有三个提供服务B 的进程分别位于192.168.1.103:9000,192.168.1.104:9000,192.168.1.105:9000 进程上,那么你向服务中心注册过后,服务中心就会有一个这样的服务列表,服务中心向各个注册的服务发送心跳机制,来检验服务是否可用,若不可用就会把服务剔除,来达到故障排除的效果。

  • 服务发现: 由于在服务治理框架下运作,服务间的调用不再通过指定的Ip:端口号这种方式来实现 ,而是向服务名发起请求实现。所以,在服务调用方在调用服务提供方接口的时候,并不知道具体服务的位置。因此,服务调用方需要向服务中心获取服务列表,以实现对具体服务的访问。

比如一个服务调用者C想要获取服务A的ip来完成接口的调用,那么他首先应该去服务中心发起咨询你服务的请求,由注册中心的服务列表将A的位置发送给调用者C,如果按照上面服务A地址的话,那么调用者C会由两个服务A的地址来提供服务,当服务C需要调用的时候,便从服务A中的清单中采用轮询的方式取出一个位置来服务调用,这个过程也被称为负载均衡。

Netflix Eureka

  • Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
  • Eureka包含两个组件: Eureka ServerEureka Client
  • Eureka Server 简称Eureka 服务端, 主要提供服务注册功能,其实也就相当于是注册中心,和其他服务注册中心一样,提供高可用的配置,同时也支持集群部署,当集群中某一个节点发生故障时,那么Eureka就会进入自我保护模式,它允许故障的节点继续提供服务的发现与注册,当故障分片恢复运行时,集群中的其他分片会把他们的状态再同步回来。
  • Eureka Client:简称Eureka 客户端,主要处理服务的注册与发现。客户端通过注解和参数配置的方式,Eureka 客户端向注册中心注册自身的服务并周期性的发送心跳机制来更新服务租约。同时,它也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期性地刷新服务状态。

搭建服务注册中心

Spring Cloud Eureka 是采用SpringBoot 进行项目的快速搭建的,如果不太了解SpringBoot的话,可以了解一下SpringBoot 入门实例。

  • 首先创建SpringBoot工程,命名为Eureka-server,也就是Eureka服务端,创建完成后在pom.xml文件中增加如下maven依赖,完整的文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.eureka.server</groupId>
   <artifactId>eureka-server</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>eureka-server</name>
   <description>Demo project for Spring Boot</description>
   <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>1.3.7.RELEASE</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <properties>
       <java.version>1.8</java.version>
   </properties>
   <dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-eureka-server</artifactId>
       </dependency>
   </dependencies>
   <dependencyManagement>
       <dependencies>
           <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-dependencies</artifactId>
               <version>Brixton.SR5</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
       </dependencies>
   </dependencyManagement>
</project>
• 在SpringBoot启动类,也就是@SpringBootApplication修饰的主方法中加入如下注解@EnableEurekaServer。
   
   @EnableEurekaServer
   @SpringBootApplication
   public class EurekaServerApplication {
       public static void main(String[] args) {
           SpringApplication.run(EurekaServerApplication.class, args);
      }
  }

加入这个注解也就标识着这是一个Eureka的服务端,可以启动服务了,但是启动服务会报错,因为你没有添加注册中心的相关配置。

  • application.properties文件中加入如下内容
server.port=8000

eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

server.port 就代表着注册中心的端口号

eureka.client.service-url.defaultZone :eureka客户端默认服务url

eureka.client.register-with-eureka : 表示注册中心是否向其他注册中心注册自己,单节点注册中心不需要,设置为false

eureka.client.fetch-registry: 表示注册中心是否主动去检索服务,并不需要检索服务,设置为false

其他配置:

# 项目contextPath,一般在正式发布版本中,我们不配置

# 避免加上更目录:Cannot execute request on any known server

# 加上根目录也需要在注册地址上加入根

server.context-path=/eureka81

# 错误页,指定发生错误时,跳转的URL。请查看BasicErrorController源码便知

server.error.path=/error

# 通过spring.application.name属性,我们可以指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问。

spring.application.name=eureka-server

# eureka是默认使用hostname进行注册,可通过一下项自动获取注册服务IP或者直接通过eureka.instance.ip-address指定IP

# eureka.instance.prefer-ip-address=true

# SpringBoot 在启动的时候会读配置文件,会把prefer-ip-address 默认转换为preferIpAddress驼峰命名

eureka.instance.preferIpAddress=true


# 设为false,关闭自我保护

eureka.server.enable-self-preservation=false

# 清理间隔(单位毫秒,默认是60*1000

eureka.server.eviction-interval-timer-in-ms=6000


# 开启健康检查(需要spring-boot-starter-actuator依赖)

eureka.client.healthcheck.enabled=false

# 续约更新时间间隔(默认30秒)

eureka.instance.lease-renewal-interval-in-seconds=10

# 续约到期时间(默认90秒)

eureka.instance.lease-expiration-duration-in-seconds=30

没有加入 eureka.instance.preferIpAddress=true 之前,默认本地为注册中心

7.jpg


加入 eureka.instance.preferIpAddress=true 之后,圈出来的ip即为eureka.client.service-url.defaultZone指定的 ip。


8.jpg


在完成了上述配置之后,应用程序启动并访问http://localhost:1111/ 可以看到如下图所示的信息版,其中Instances curently registered with Eureka 是空的,表明还没有任何服务提供者提供服务。

            </div>

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring Cloud Eureka 详述(一)(下)
Spring cloud eureka是Spring cloud netfilx中的一部分,它基于Netflix Eureka做了二次封装,主要职责完成Eureka 中的服务治理功能
24 0
Spring Cloud Eureka 全解 (3) - 核心流程-服务注册与取消详解
Spring Cloud Eureka 全解 (3) - 核心流程-服务注册与取消详解
70 0
Spring Cloud Eureka 源码解析(下)
本文主要是从 Eureka 源码的角度分析 Eureka 的实现原理和业务细节流程, 在本文的开头也给出了集群模式服务端的配置以及客户端的配置 demo.
99 0
Spring Cloud Eureka 源码解析(上)
本文主要是从 Eureka 源码的角度分析 Eureka 的实现原理和业务细节流程, 在本文的开头也给出了集群模式服务端的配置以及客户端的配置 demo.
69 0
Spring Cloud Eureka源码分析(上)
Spring Cloud Eureka源码分析(上)
49 0
Spring Cloud Eureka
Spring Cloud Eureka
29 0
Spring Cloud Eureka 自我保护机制实战分析
前些天栈长在Java技术栈微信公众号分享过 Spring Cloud Eureka 的系列文章:
45 0
Spring Cloud进阶篇之Eureka原理分析
Spring cloud Eureka 原理介绍
1692 0
Spring Cloud Eureka(客户端)
上次我们讲了Spring Cloud Eureka服务端,这次来说下客户端。客户端简单来说就是把服务注册到服务端 Eureka客户端 主要处理服务的注册和发现。
1756 0
Spring Cloud Alibaba,基础篇 (一)(下)
Spring Cloud Alibaba,基础篇 (一)
97 0
+关注
3195
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载