注册中心概述

什么是注册中心?

相当于服务之间的‘通讯录’,记录了服务和服务地址之间的映射关系。在分布式架构中服务会注册到这里。当服务需要调用其他服务时,就在注册中心找到其他服务的地址,进行调用

注册中心的主要作用?

注册中心一般有以下的功能:

服务发现

服务注册/反注册:保存服务提供者和调用者的关系

服务订阅/取消订阅:服务调用者订阅服务提供者的信息

服务路由:筛选整合服务提供者

服务配置

配置订阅:服务提供者和消费者订阅微服务相关的配置

配置下发:主动将配置推送给提供者和消费者

服务健康检测

检测服务提供者的健康情况

Eureka

Eureka是SpringCloud微服务架构中常用的注册中心,其架构图如下:

由其架构图可以看出,Eureka可以分为三部分:Eureka服务端,Eureka服务提供者,Eureka服务消费者。

其中Eureka服务端需要作为独立的服务运行,而服务提供者、消费者则是需要使用EurekaClient嵌入我们自己的服务中。

其运行原理是这样的:

当服务提供者启动时,会向注册中心发送请求,在注册中心注册实例。并且每隔一段时间向注册中心发送心跳,注册中心会保存实例和地址的映射关系

当服务消费者启动时,会从注册中心拉去所有的注册信息,并缓存起来。当需要调用某一个服务时。根据缓存的注册信息直接调用服务

聪明的你这个时候会察觉到。既然消费者使用的是缓存的注册信息。那么一定会存在一种情况就是服务提供者这边已经宕机。这个时候消费者根据缓存的信息没有及时更新就会导致调用失败,Eureka是怎么解决这个问题的呢?且往下看。

服务端的搭建

创建工程,导入坐标

这里推荐使用 Spring Initializer 直接创建。选择 web 和 euraka 即可。主要引入的依赖如下:

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-netflix-eureka-server

配置 application.yml ,说明见注释

server:

port: 9000

eureka:

instance:

hostname: localhost

client:

register-with-eureka: false # 是否将自己注册到注册中心

fetch-registry: false # 是否从Eureka中获取注册信息

service-url: # Eureka Client 的请求地址

defaultZone: http://#{eureka.instance.hostname}:#{server.port}/eureka/

配置启动类

启动类除了常规的 @SpringBootApplication 外,还要添加 @EnableEurekaServer 表示开启 Eureka 服务

启动项目,浏览器访问 localhost:9000 出现以下页面即表示服务搭建成功

注册服务到Eureka

在要注册的工程中导入Eureka Client的坐标

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

在 application.yml 中配置Eureka服务端的地址:

这里需要特别注意:Eureka客户端配置的服务端地址使用的key是 defaultZone,不是 default_zone 如果写错会导致客户端无法注册服务,进而导致客户端无法启动

server:

port: 9001

spring:

application:

name: SERVICE_PROVIDER # 服务名称

datasource:

url: jdbc:mysql://192.168.25.128:3306/mysql?characterEncoding=UTF-8&useSSL=false&serverTimezone=CTT

driver-class-name: com.mysql.cj.jdbc.Driver

password: 521

username: keats

eureka:

client:

service-url:

defaultZone: http://localhost:9000/eureka/ # 刚刚在Eureka Server 配置的请求地址

register-with-eureka: true # 注册到注册中心

fetch-registry: false # 作为服务提供者,可以不用从Eureka获取注册信息。视实际情况而定

instance:

prefer-ip-address: true # 使用IP地址注册

在启动类加上 @EnableEurekaClient 注解(SpringCloud Finchley.RELEASE 版本及之后的版本会在项目中引入EurekaClient依赖后自动开启,我们使用的是最新版。因此也可以不用添加)

Euraka 客户端默认每隔 30 S向服务端发送一次心跳请求,如果服务端 90 S没有收到某客户端发送的请求将视为客户端宕机。会将其从服务列表剔除

消费者获取和使用服务

搭建服务消费者和提供者的步骤类似,首先是添加 eureka-client 依赖

之后配置 application.yml 如下:

server:

port: 9002

spring:

application:

name: SERVICE_CONSUMER # 服务名称

eureka:

client:

service-url: # 刚刚在Eureka Server 配置的请求地址

defaultZone: http://localhost:9000/eureka/

fetch-registry: true

register-with-eureka: false

这样该服务就具备了从Eureka获取服务的能力,那具体怎么使用呢?

Spring 为我们提供了一个Bean:DiscoveryClient (注意需要导入:org.springframework.cloud.client.discovery 包下的DiscoveryClient 而不是 netflix 包下的类)

我们在需要获取服务的类里面注入该类

@Autowired

private DiscoveryClient discoveryClient;

接着调用其 getInstances(String instancdName) 方法,通过服务的名称获取服务列表。我们这里只注册了一个服务提供方没有搭集群所以直接使用列表第0位的服务实体。而实体提供了 getUri() 方法用于获取服务提供者的 url。接着我们用该方法替换硬编码的 url 即可完成 Eureka 的使用。核心代码如下:

网上的很多其他教程在这里使用的都是 getHost() + ":" + getPort() 拼接,推测可能是版本比较老旧。新API既然已经提供了 getUri() 方法我们就要积极使用。这里建议读者们在使用某Bean的方法时通过打点的方式阅读一下其开放的API,大概了解一下

@GetMapping("teacher/users")

public List getAllUser(){

List service_provider = discoveryClient.getInstances("SERVICE_PROVIDER");

ServiceInstance serviceInstance = service_provider.get(0);

return restTemplate.getForObject(serviceInstance.getUri() + "/api/v1/users", List.class);

}

Eureka的自我保护

如上图提示,表示Eureka进入了自我保护模式。自我保护模式的介绍如下:

Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否高于 85%,如果高于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期。在我看来可以用一句古成语来形容这种模式---“三人成虎” 即当越来越多的服务提供者心跳不能到达时。Eureka开始不在怀疑是提供者GG,而怀疑自己了!

在开发环境中,我们往往启动一个Eureka服务 + 一个 Eureka 提供者,如果此时提供者正好出了问题。90S未发送心跳。但由于满足自我保护条件(这段时间失败比例为100%),Eureka不会将服务剔除。会直接导致服务消费者无法正确获取服务。因此开发环境中建议关闭其自我保护机制,而在生产环境打开之, yml 配置如下:

eureka:

server:

enable-self-preservation: false # 关闭自我保护

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[SpringCloud五大神兽之Eureka]http://www.zyiz.net/tech/detail-107318.html

java四神兽_SpringCloud五大神兽之Eureka相关推荐

  1. java cloud五大神兽_SpringCloud五大神兽之Eureka

    注册中心概述 什么是注册中心? 相当于服务之间的'通讯录',记录了服务和服务地址之间的映射关系.在分布式架构中服务会注册到这里.当服务需要调用其他服务时,就在注册中心找到其他服务的地址,进行调用 注册 ...

  2. java复习笔记4--SpringCloud系列二:五大神兽之Eureka

    前面两天介绍了SpringCloud的基础知识,以及窥探了一下加载流程,整个代码还是很长并且晦涩的,一定要多debug去跟进,看每个对象何时创建和赋值,一步步跟着走,这样才能对整个流程有一个很好的了解 ...

  3. springcloud五大神兽之Eureka介绍

    一.springcloud简介 1.0 什么是微服务? ① 业务角度 从业务角度分析,就是将整体项目(传统的一站式应用)按照业务拆分,将每个业务拆分为一个个独立的服务,彻底解除业务模块之间的耦合,每个 ...

  4. 初识Spring Cloud 之 五大神兽

    一览无遗 初识Spring Cloud 之 五大神兽 一.简介 二.我所了解的五大神兽 三.我所理解的五大神兽 ①.Spring Cloud Eureka(注册中心) 原理图解 代码步骤 代码实现 ② ...

  5. SpringCloud分布式开发五大神兽(转)

    SpringCloud分布式开发五大神兽 服务发现--Netflix Eureka 客服端负载均衡--Netflix Ribbon 断路器--Netflix Hystrix 服务网关--Netflix ...

  6. SpringCloud学习笔记3:Spring Cloud Netflix 组件(五大神兽)

    一.Spring Cloud Netflix有哪些组件? eureka (提供服务注册与发现功能) ribbon(提供负载均衡功能) Feign(整合了ribbon和Hystrix,具有负载均衡和熔断 ...

  7. SpringCloud分布式开发五大神兽(一)

    原文:https://segmentfault.com/a/1190000005029218 SpringCloud分布式开发五大神兽 服务发现--Netflix Eureka 客服端负载均衡--Ne ...

  8. SpringCloud 教程(一)| 微服务及五大神兽组件 --- 微服务架构

    一.前言. 随着微服务技术的兴起,越来越多的项目都在使用 微服务架构,学习的趋势已经刻不容缓,这几天特意学习了一下,在此记录. 特别感谢 方志朋 老师的博客.https://blog.csdn.net ...

  9. 鸿蒙坐骑九彩祥云,封神演义五大神兽坐骑排名,第一名太出人意料了!

    原标题:封神演义五大神兽坐骑排名,第一名太出人意料了! 5.四不象 原为元始天尊的坐骑,后送于姜子牙,它的犄角像鹿,面部像马,蹄子像牛,尾巴像驴,但整体看上去却似鹿非鹿,似马非马,似牛非牛,似驴非驴, ...

最新文章

  1. 多个SSH Key自动化配置
  2. Open Source Bing Maps API for ASP.NET MVC
  3. anaconda和vscode配置python_vscode配置anaconda3的方法步骤
  4. 开源项目|基于darknet实现量化感知训练,已实现yolov3-tiny所有算子
  5. 阿里云服务器的安装以及使用
  6. Fiori Elements - get annotation implementation in backend
  7. 计算机辅助技术课设,《计算机辅助设计技术》课程标准-20210311103339.doc-原创力文档...
  8. python sanic部署_Sanic教程:配置
  9. Git初学札记(一)————Git简介与安装
  10. php查询mysql数据库输出到前台_PHP读取数据库表显示到前台
  11. C语言中#define的用法
  12. Scratch案例——弹球游戏
  13. 还能这样玩——关于一些OI的黑(sao)科(cao)技(zuo)优化
  14. pygame编写飞机大战(9)-播放爆炸动画
  15. VMware win10 虚拟机通过NAT模式联网
  16. 6p14推挽胆机20w功放电路图_6P14推挽双输出牛胆机
  17. 【小程序】组件形式 引入第三方图标iconfont
  18. Oracle的hint
  19. HTML CSS之复合选择器中的交集选择器、并集选择器、后代选择器、子元素选择器、相邻兄弟选择器、属性选择器
  20. 软件需求工程与uml建模——高速公路智能服务区

热门文章

  1. 【渝粤教育】国家开放大学2018年春季 0050-21T民族理论与民族政策 参考试题
  2. [渝粤教育] 中国地质大学 面向对象程序设计 复习题 (2)
  3. 【无线串口模块快速选型指南】通信频点、芯片、通信距离、功率灵敏度、电流 空中速率
  4. lora技术在无线抄表行业应用
  5. java 包装类方法总结_【源码】java包装类总结
  6. lottie android min sdk,跳一个Lottie无法回调开始播放动画事件的坑
  7. mysql 定义年龄属性_sql中定义年龄用什么数据类型,长度为多少?
  8. mysql创建表时添加范式_MySql三大范式与数据库设计和表创建常用语句
  9. python学习笔记:第19天 类的约束、异常、MD5和logging
  10. 洛谷 1137 旅行计划