Spring Cloud Eureka

服务治理

  是微服务架构中最核心最基本的模块。用于实现各个微服务实例的自动化注册与发现。

  服务注册:

    在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机和端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按服务名分类组织服务清单。

    服务注册中心还需要以心跳的方式去监测清单中的服务是否可用,若不可用,需从服务清单中剔除,达到清楚障碍的目的。

  服务发现:

    服务的调用通过向服务名发起请求调用实现。调用方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实例的访问。

Netflix Eureka

  Spring Cloud Eureka 使用Netflix Eureka来实现服务注册于发现。既包含服务端组件也包含客户端组件,且均采用java编写,因此Eureka适用于java实现的分布式系统,或与JVM兼容语言构建的系统。

  因为Eureka服务端的服务治理机制提供了完备的RESTful API,也支持非java语言构建的微服务应用纳入Eureka的服务治理体系中去。

  Eureka服务端:

    服务注册中心,支持高可用配置。依托于强一致性提供良好的服务实例可用性,应用于不同的故障场景。

    以集群部署,分片出现故障时,Eureka进入自我保护模式,其他分片提供服务的发现与注册,当故障分片恢复时,集群中的其他分片会把故障分片的状态再次同步回来。

  Eureka客户端:

    处理服务的注册于发现。

    在程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性地发送心跳来更新它的服务租约。也可以从注册中心查询当前注册的服务信息并把他们缓存到本地周期性地刷新服务状态。

搭建服务注册中心

  pom依赖:

    <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <dependencies>
<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>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

  然后在主类上加上注解@EnableEurekaServer

  

  在application.properties上加入:

  

  eureka.client.register-with-eureka:这是向注册中心注册自己,由于本身就是注册中心,所以设置为false

  eureka.client.fetch-registry:注册中心就是维护服务实例,不需要检索服务,设置为false

  eureka.client.service-url.defaultZone这个实际上就是注册中心的地址。

注册服务提供者

  pom文件:

    <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

  在主类上添加注解@EnableDiscoveryClient

  然后在配置文件中添加:

  即可在配置中心中找到服务:

高可用注册中心

  之前我们通过下面两个参数让服务中心不注册自己:

  eureka server 的高可用实际上就是将自己作为服务向其他服务注册中心注册自己,这样就可以形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用的效果。

  注:配置文件还需要添加上面两个参数,以防止服务中心对自己进行注册。

创建配置文件application-peer1.properties,作为peer1配置中心,且执行peer2配置中心:

创建配置文件application-peer2.properties,作为peer2配置中心,且执行peer1配置中心:

通过命令行分别启动peer1和peer2:

这时服务注册的时候,需要在eureka.client.service-url.defaultZone分别注册peer1与peer2,用逗号分开。

服务发现与消费

  通过前文已经完成了服务注册中心与服务提供者了。

  我们现在需要构建一个服务消费者,它主要有两个目标:服务发现与消费服务。

  服务发现是由eureka的客户端完成,服务消费是由Ribbon完成。

  Ribbon是一个基于HTTP和TCP的客户端负载均衡器。

  创建一个SpringBoot的基本工程来实现服务消费者,取名为ribbon-consumer。pom如下:

    <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<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</artifactId>
</dependency> <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

  在主类上加@EnableDiscoveryClient注解,让该应用注册为Eureka客户端,获取发现服务能力。同时在主类中注入RestTemplate的Spring Bean实例。并通过@LoadBalanced注解开启客户端负载均衡。

  创建对应的接口控制器:

  注:可以看到访问的地址是一个服务名,而不是一个具体的地址,在服务治理框架中,这是非常重要的特性。

  在配置文件中配置eureka注册中心的位置。

  

  

SpringCloud微服务实战——第三章服务治理的更多相关文章

  1. 【SpringCloud微服务实战学习系列】服务治理Spring Cloud Eureka

    Spring Cloud Eureka是Spring Cloud Netflix微服务中的一部分,它基于NetFlix Sureka做了二次封装,主要负责完成微服务架构中的服务治理功能. 一.服务治理 ...

  2. Spring-cloud微服务实战【三】:eureka注册中心(中)

      回忆一下,在上一篇文章中,我们创建了两个springboot项目,并且在consumer项目中通过restTemplate进行HTTP通信,成功访问到了producer提供的接口,思考一下这样的实 ...

  3. 微服务实战(三):深入微服务架构的进程间通信 - DockOne.io

    原文:微服务实战(三):深入微服务架构的进程间通信 - DockOne.io [编者的话]这是采用微服务架构创建自己应用系列第三篇文章.第一篇介绍了微服务架构模式,和单体式模式进行了比较,并且讨论了使 ...

  4. springcloud微服务实战--笔记

    目前对Springcloud对了解仅限于:“用[注册服务.配置服务]来统一管理其他微服务” 这个水平.有待提高 Springcloud微服务实战这本书是翟永超2017年5月写的,时间已经过去了两年,略 ...

  5. SpringCloud学习(SPRINGCLOUD微服务实战)一

    SpringCloud学习(SPRINGCLOUD微服务实战) springboot入门 1.配置文件 1.1可以自定义参数并在程序中使用 注解@component @value 例如 若配置文件为a ...

  6. Spring-cloud微服务实战【一】:微服务的概念与演进过程

    本文是一个系列文章,主要讲述使用spring-cloud进行微服务开发的实战.在开始之前,我们先说一下从传统的单一部署架构到微服务的发展过程,以便让童鞋们更好的理解微服务的概念与演进过程. 1.单体架 ...

  7. SpringCloud微服务实战——第一章序言读书笔记

    什么是微服务架构 是系统架构上的一种设计风格,将独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间基于HTTP的RESTful API进行通信协作. 每个小型服务都围绕各自的 ...

  8. Spring-cloud微服务实战【二】:eureka注册中心(上)

    ## 前言   本系列教程旨在为大家演示如何一步一步构建一整套微服务系统,至于其中的数据库用什么,订单ID如何保持唯一,分布式相关问题等等不在我们讨论范围内,本教程为了方便大家后续下载代码运行测试,不 ...

  9. SpringCloud微服务实战——搭建企业级开发框架(十三):OpenFeign+Ribbon实现高可用重试机制

      Spring Cloud OpenFeign 默认是使用Ribbon实现负载均衡和重试机制的,虽然Feign有自己的重试机制,但该功能在Spring Cloud OpenFeign基本用不上,除非 ...

随机推荐

  1. Linux网络检测手段汇总

    1.iftop iftop可测量通过每一个套接字连接传输的数据:它采用的工作方式有别于nload.iftop使用pcap库来捕获进出网络适配器的数据包,然后汇总数据包大小和数量,搞清楚总的带宽使用情况 ...

  2. Flume+Kafka+storm的连接整合

    Flume-ng Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. Flume的文档可以看http://flume.apache.org/FlumeUserGuide.html ...

  3. UITableViewCell使用时注意事项

    1,注意使用重用机制(有利于提高效率) 2,做到通过改变模型去间接改变UI样式(做到永久改变,无论怎样拖动刷新,都不会恢复改变) 3,在通过传递模型给Cell控件布局时,记得完全覆盖(嗯,不好解释,主 ...

  4. 数独C语言算法

    备好:http://blog.chinaunix.net/uid-26456800-id-3380612.html

  5. iptables基础知识详解

    iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙.如果你是第一 ...

  6. 小组E-R图的改进 2.0版本

    上图是我对我们小组的数据库E-R图的改进 我在出勤上加了一个学生留言,因为我们组在需求分析中说明了有个教师与学生通过此软件交流的功能,教师可以通过这个功能给学生留言,学生也可以通过此功能请假或者说明旷 ...

  7. 执行Oracle存储过程报权限不足的解决方法

    当前Oracle用户sofa拥有connect.dba.resource的角色权限,但奇怪的是却没有执行Oracle Procedure的权限.后来通过查找资料发现:如果sofa用户需要执行Proce ...

  8. Spark基本概念快速入门

      Spark集群 一组计算机的集合,每个计算机节点作为独立的计算资源,又可以虚拟出多个具备计算能力的虚拟机,这些虚拟机是集群中的计算单元.Spark的核心模块专注于调度和管理虚拟机之上分布式计算任务 ...

  9. java创建多线程的三种方式

    /***************************继承Thread类创建多线程************************/ public class FirstThread extends ...

  10. Codeforces Round #283 (Div. 2) A ,B ,C 暴力,暴力,暴力

    A. Minimum Difficulty time limit per test 2 seconds memory limit per test 256 megabytes input standa ...