SpringCloud微服务实战——第三章服务治理
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微服务实战——第三章服务治理的更多相关文章
- 【SpringCloud微服务实战学习系列】服务治理Spring Cloud Eureka
Spring Cloud Eureka是Spring Cloud Netflix微服务中的一部分,它基于NetFlix Sureka做了二次封装,主要负责完成微服务架构中的服务治理功能. 一.服务治理 ...
- Spring-cloud微服务实战【三】:eureka注册中心(中)
回忆一下,在上一篇文章中,我们创建了两个springboot项目,并且在consumer项目中通过restTemplate进行HTTP通信,成功访问到了producer提供的接口,思考一下这样的实 ...
- 微服务实战(三):深入微服务架构的进程间通信 - DockOne.io
原文:微服务实战(三):深入微服务架构的进程间通信 - DockOne.io [编者的话]这是采用微服务架构创建自己应用系列第三篇文章.第一篇介绍了微服务架构模式,和单体式模式进行了比较,并且讨论了使 ...
- springcloud微服务实战--笔记
目前对Springcloud对了解仅限于:“用[注册服务.配置服务]来统一管理其他微服务” 这个水平.有待提高 Springcloud微服务实战这本书是翟永超2017年5月写的,时间已经过去了两年,略 ...
- SpringCloud学习(SPRINGCLOUD微服务实战)一
SpringCloud学习(SPRINGCLOUD微服务实战) springboot入门 1.配置文件 1.1可以自定义参数并在程序中使用 注解@component @value 例如 若配置文件为a ...
- Spring-cloud微服务实战【一】:微服务的概念与演进过程
本文是一个系列文章,主要讲述使用spring-cloud进行微服务开发的实战.在开始之前,我们先说一下从传统的单一部署架构到微服务的发展过程,以便让童鞋们更好的理解微服务的概念与演进过程. 1.单体架 ...
- SpringCloud微服务实战——第一章序言读书笔记
什么是微服务架构 是系统架构上的一种设计风格,将独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间基于HTTP的RESTful API进行通信协作. 每个小型服务都围绕各自的 ...
- Spring-cloud微服务实战【二】:eureka注册中心(上)
## 前言 本系列教程旨在为大家演示如何一步一步构建一整套微服务系统,至于其中的数据库用什么,订单ID如何保持唯一,分布式相关问题等等不在我们讨论范围内,本教程为了方便大家后续下载代码运行测试,不 ...
- SpringCloud微服务实战——搭建企业级开发框架(十三):OpenFeign+Ribbon实现高可用重试机制
Spring Cloud OpenFeign 默认是使用Ribbon实现负载均衡和重试机制的,虽然Feign有自己的重试机制,但该功能在Spring Cloud OpenFeign基本用不上,除非 ...
随机推荐
- Docker容器技术-基础命令
一.基础命令 1.运行一个镜像 [root@bogon ~]# docker run debian echo "Hello World" Unable to find image ...
- P4340 [SHOI2016]随机序列
题目 P4340 [SHOI2016]随机序列 思维好题 做法 是否觉得水在于你是否发现加减是会抵消的,所以我们只用考虑乘的部分 一块乘只能前面无号(也就是前缀形式)才统计,所以用线段树维护区间前缀乘 ...
- gcc编译c、c++入门
一.c语言 1.在当前目录下新建c文件 $:vim hello.c 2.按i进入编辑模式.按esc退出编辑模式,输入源代码 #include <stdio.h> int main(void ...
- maven install 找不到自定义jar包
解决方案是在Prefernces-->Maven-->user Settings 里面点击Update settings 然后就好了.因为默认你配置settings.xml指向你的类库的时 ...
- Response对象介绍(服务器到客户端)
1.response的状态码和响应头设置 package com.test; import java.io.IOException; import java.io.PrintWriter; impor ...
- 外推主要发布平台(JM)
百家.搜狐.一点.头条 主要发布平台: 搜狐(权重高.收录好.审核相对宽松) https://mp.sohu.com/mpfe/v3/login 网易号(开通网易号,会有网易博客,网易博客可被收录 ...
- 简介web服务器的工作原理
一 什么是web服务器,应用服务器和web容器? 对于web服务器与应用服务器:“在过去它们是有区别的,但是这两个不同的分类慢慢地合并了,而如今在大多在情况下和使用中可以把它们看成一个整体.” 但是当 ...
- 内核编译错误解答(elf_i386错误)
内核编译错误解答(elf_i386错误) 在编译内核过程中遇到的问题及解决方法: 1.root@org:/usr/src/linux# make menuconfig *** Unable to f ...
- QT 使用QTcpServer QTcpSocket 建立TCP服务器端 和 客户端
1. 如图客户端连接server后,server发送"hello tcp" 给客户端 2. 实例代码 ----------------------------------- s ...
- RowSet
import java.io.FileInputStream; import java.util.Properties; import javax.sql.rowset.JdbcRowSet; imp ...