微服务之SpringCloud实战(二):SpringCloud Eureka服务治理

服务治理

  SpringCloud Eureka是SpringCloud Netflix微服务套件的一部分,它基于Netflix Eureka做了二次封装,主要完成微服务的服务治理功能,SpringCloud通过为Eureka增加了SpringBoot自动化配置,只需要简单的依赖和配置就可完成Eureka整合搭建。

    服务治理可以说是微服务中做核心的模块,主要负责服务的自动化注册与发现,在最初开始构建微服务的时候,可能服务并不会很多,我们可以通过一些静态配置进行相互调用,但是随着业务的更新迭代,会越来越复杂,就会发现静态配置已经难以满足我们的需求了,我们的集群、服务位置、服务命名都可能发生变化,如果是人工进行维护的话将消耗很多的人力,为了解决微服务中的服务实例维护问题,产生了大量的服务治理的框架,这些框架都围绕服务注册和发现及服务实例的自动化管理。

话不多说上代码,搭建一个单机的Eureka,首先需要创建SpringBoot项目,创建SpringBoot这里就不讲解了,不会可以看一下我搭建SpringBoot的文章,下图为目录:

导入Eureka相关依赖信息,SpringBoot我用的是1.5.3-RELEASE版本:

 1 <parent>
 2         <groupId>org.springframework.boot</groupId>
 3         <artifactId>spring-boot-starter-parent</artifactId>
 4         <version>1.5.3.RELEASE</version>
 5     </parent>
 6
 7     <properties>
 8         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 9         <java.version>1.8</java.version>
10         <spring.cloud.version>Dalston.SR2</spring.cloud.version>
11     </properties>
12
13     <dependencyManagement>
14         <dependencies>
15             <dependency>
16                 <groupId>org.springframework.cloud</groupId>
17                 <artifactId>spring-cloud-dependencies</artifactId>
18                 <version>${spring.cloud.version}</version>
19                 <type>pom</type>
20                 <scope>import</scope>
21             </dependency>
22         </dependencies>
23     </dependencyManagement>
24
25     <dependencies>
26         <dependency>
27             <groupId>org.springframework.cloud</groupId>
28             <artifactId>spring-cloud-starter-eureka-server</artifactId>
29         </dependency>
30         <dependency>
31             <groupId>org.springframework.boot</groupId>
32             <artifactId>spring-boot-starter-actuator</artifactId>
33         </dependency>
34     </dependencies>

EurekaServer.java代码如下,也就是EurekaServer启动入口:

 1 package cloud.eureka.server;
 2
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 import org.springframework.boot.web.support.SpringBootServletInitializer;
 6 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
 7
 8 @SpringBootApplication
 9 @EnableEurekaServer
10 public class EurekaServer extends SpringBootServletInitializer {
11     public static void main(String[] args) {
12         SpringApplication.run(EurekaServer.class, args);
13     }
14 }

核心部分application.yml:

#公共配置信息
server:
  port: 9901

spring:
  application:
    name: eureka-server
  profiles:
    active: node1

eureka:
  instance:
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ipAddress}:${server.port}
  server:
    enableSelfPreservation: true                #关闭保护机制,以确保注册中心可以将不可用的实例剔除.(注意:自我保护模式是一种应对网络异常的安全保护措施,使用自我保护模式,可以让Eureka集群更加的健壮、稳定)
    evictionIntervalTimerInMs: 5000            #eureka server清理无效节点的时间间隔,默认60000毫秒,即60秒
  client:
    registerWithEureka: true
    fetchRegistry: true

#用---分割不同的环境对应的配置信息(YML以"---"作为文档分割符,以"..."作为结束标志)
---
spring:
  profiles: node1

eureka:
  client:
    serviceUrl:
      defaultZone: http://10.200.159.22:${server.port:9902}/eureka/
...

搭建结束,是不是很简单想迫不及待的运行一下了:

运行方式:

  1.IDE直接配置启动类

  2.maven install之后执行java -jar eureka-server.jar --spring.profiles.active=node1&

  3.mvn spring-boot:run -Dspring.profiles.active=node1

 启动之后访问测试地址:http://配置中心IP:端口,访问之后就会出现下面的界面

注册成功之后,一起来看下原理:

服务注册:

  服务提供在启动时候会发送一个REST请求将自己注册到Eureka Server,同时会带上自身的元数据信息(主机、端口、URL等),Eureka接收到REST请求之后,将元数据信息存储到一个双层Map中,第一层的Key是服务名,第二层的Key是服务的实例名,在服务注册的时候需要确认一下eureka.client.register-with-eureka=true参数是否正确,如果为false则不启动注册操作。

服务同步:

  服务提供者将自己注册到不同的服务注册中心上,也就是说他们的信息被两个服务注册中心所维护,由于服务注册中心之间因相互注册为服务,当服务提供者发送注册请求到其中一个服务注册中心的时候,它会将该请求转发给集群中相连的其他注册中心,从而实现注册中心之间的服务同步。

服务续约:

  注册成功之后,服务提供者会维护一个心跳来持续告诉Eureka Server “我还活着”,防止Eureka的失效剔除将该服务实例从服务列表中排出出去。

  eureka.instance.lease-renewal-interval-in-seconds=30
  eureka.instance.lease-expiration-duration-in-seconds=90

服务下线:

  系统运行中必然会面临关闭和重启服务的某个实例情况,在服务关闭期间我们自然不希望客户端可以继续调用关闭的实例,所以在客户端程序中,当服务实例进行正常关闭操作的时候,会触发一个服务下线的REST请求给Eureka,告诉它“我要下线了”,服务端接受到请求之后将状态置为DOWN,并且把该事件传播出去。

服务失效剔除:

  有些时候,微服务并不一定是正常下线的,可能内存溢出、网络故障等问题的出现不能让微服务正常使用,但是服务注册中心并没有收到服务下线的请求,为了将这些出问题的微服务实例从服务列表中剔除掉,Eureka在启动的时候会创建一个定时任务,默认每隔60秒将清单中默认90秒没有服务续约的微服务剔除。

自我保护:

  Eureka在运行期间会统计服务发送心跳失败的比例在15分钟内是否低于85%,如果出现低于的情况,Eureka就会将当前的实例信息保护起来,让这些实例不会过期。但是,在保护的这段期间如果出现问题,客户端很容易拿到实际已经不存在的服务实例,会出现调用失败的情况,所以客户端必须要有容错机制,比如请求重试、断路由等。

之后会讲解如何搭建Eureka集群,敬请期待。。。

原文地址:https://www.cnblogs.com/gslblog/p/9910315.html

时间: 2024-10-09 03:27:42

微服务之SpringCloud实战(二):SpringCloud Eureka服务治理的相关文章

SpringCloud分布式微服务b2b2c电子商务(二)Eureka(服务注册和服务发现基础篇)

一:Eureka简介 Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一.用于云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移.了解springcloud架构可以加求求:三五三六二四七二五九,服务注册与发现对于微服务系统来说非常重要.有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务.他的功能类似于dubbo的注册中心(register).服务发现:服务发现是微服务基础架构的

每天学点SpringCloud(二):服务注册与发现Eureka

相信看过 每天学点SpringCloud(一):简单服务提供者消费者调用的同学都发现了,在最后消费者调用提供者的时候把提供者的地址硬编码在了代码中,这样的方式肯定是不行的,今天,我们就是要Eureka来解决这个问题 创建Eureka服务 1.我们在原先项目的基础上再新建一个项目cloud-demo-eureka 此项目的依赖为 <?xml version="1.0" encoding="UTF-8"?><project xmlns="ht

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

1.概念:Eureka 服务发现框架 2.具体内容 对于服务发现框架可以简单的理解为服务的注册以及使用操作步骤,例如:在 ZooKeeper 组件,这个组件里面已经明确的描述了一个服务的注册以及发现操作流程,在整个 Rest 架构里面,会存在有大量的微服务的信息. 在 SpringCloud 之中使用了大量的 Netflix 的开源项目,而其中 Eureka 就属于 Netflix 提供的发现服务组件,所有的微服务在使用之中全部向 Eureka 之中进行注册,而后客户端直接利用 Eureka 进

java版b2b2c社交电商spring cloud分布式微服务(二)Eureka(服务注册和服务发现基础篇)

一:Eureka简介 电子商务社交平台源码请加企鹅求求:叁五叁六贰四柒贰五九.   Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一.用于云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. 服务注册与发现对于微服务系统来说非常重要.有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务.他的功能类似于dubbo的注册中心(register). 服务发现:服务发现是微服务基础架构

SpringCloud 学习(二)-2 :Securing The Eureka Server

由于工作等种种原因未能连续进行学习,现在继续学习微服务,不过是新建的demo,springcloud版本用的是Finchley.SR2. 之前用简单demo实现了注册中心,现在来对注册中心加安全验证: 一.添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </d

SpringCloud 进阶之SpringCloud

1. Eureka 服务注册与发现 Eureka 是一个基于REST的服务,用于服务的的注册与发现; Eureka采用C-S的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心; Eureka包含两个组件:Eureka Server 和 Eureka Client Eureka Server提供服务注册和发现; Eureka Client是一个java客户端; 1.1 三大角色 Eureka Server提供服务注册和发现; Service Provider服务提供方

没使用Spring Cloud的版本管理导致Eureka服务无法注册到Eureka服务注册中心

创建了一个Eureka Server的服务注册集群(两个Eureka服务),都能相互注册,写了一个Eureka客户端服务无法注册到服务发现注册中心 注册中心1: 注册中心2: 服务正常: pom依赖文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://

springCloud(3):微服务的注册与发现(Eureka)

一.简介 服务消费者需要一个强大的服务发现机制,服务消费者使用这种机制获取服务提供者的网络信息.即使服务提供者的信息发生变化,服务消费者也无须修改配置. 服务提供者.服务消费者.服务发现组件三者之间的关系大致如下: 1.各个微服务在启动时,将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息. 2.服务消费者可以从服务发现组件查询服务提供者的网络地址,并使用该地址调用服务提供者的接口. 3.各个微服务与服务发现组件使用一定机制(如:心跳)通信,服务发现组件如长时间无法与某微服务

SpringCloud 第一篇: 服务的注册与发现(Eureka)

前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运行环境简单,可以在开发人员的电脑上跑. 工具: JDK8 apache-maven-3.5.2 IntelliJ IDEA 2017.3 x64 一.服务注册中心 1. 0 启动一个服务注册中心,只需要一个注解@EnableEurekaServer package com.lwc