Eureka 简介和使用

Eureka 服务注册与发现

    • 服务注册与发现
    • Eureka与Zookeeper的比较
      • ZooKeeper保证CP
      • Eureka保证AP
    • Eureka是什么?
    • Eureka原理
    • SpringBoot、Spring Cloud 和 Eureka 版本选择
    • Eureka单机搭建
      • 搭建Eureka服务端
      • 搭建Eureka客户端的服务提供者
      • 搭建Eureka客户端的服务消费者
    • Eureka集群搭建
    • eureka 的一些其他配置

服务注册与发现

在微服务架构中,服务注册与发现是核心组件之一。Spring Cloud提供了多种服务注册于发现的实现方式,例如Eureka、Consul、Zookeeper。
服务注册:将服务所在主机、端口、版本号、通信协议等信息登记到注册中心上;
服务发现:服务消费者向注册中心请求已经登记的服务列表,然后得到某个服务的主机、端口号、版本号、通信协议等信息,从而实现对具体服务的调用。
在这里插入图片描述

Eureka与Zookeeper的比较

著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)、P(分区容错性)。
由于分区容错性在分布式系统中是必须要保证的,因此我们只能在A和C之间进行权衡,ZooKeeper保证的是CP,Eureka保证的是AP。

ZooKeeper保证CP

在ZooKeeper中,当master节点因为网络故障与其他节点失去联系时,剩余的节点会重新进行leader选举,但问题在于,选举leader需要一定的时间,且选举期间ZooKeeper集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因为网络问题使得ZooKeeper集群失去master节点是大概率事件,虽然服务最终能够恢复,但是在选举期间内导致服务注册长期不可用是难以容忍的。
在这里插入图片描述

Eureka保证AP

Eureka优先保证可用性,Eureka各个节点是平等的,某几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册时如果发现连接失败,则会自动切换至其他节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。
所以Eureka在网络故障导致部分节点失去联系的情况下,只要有一个节点可用,那么注册和查询服务就可以正常使用,而不会像zookeeper那样使得整个注册服务瘫痪,Eureka优先保证了可用性。
在这里插入图片描述

Eureka是什么?

  • Eureka是一个服务治理组件,它主要包括服务注册与发现,主要用来搭建服务注册中心。
  • Eureka是一个基于REST的服务,用来定位服务,进行中间层服务的负载均衡和故障转移;
  • Eureka是Netflix公司开发的,Spring Cloud封装了Netflix公司开发的Eureka模块来实现服务注册与发现,也就是说Spring Cloud对Netflix Eureka进行了二次封装;

Eureka原理

  • Eureka采用了C-S(客户端/服务端)的设计架构,也就是Eureka由两个组件组成:Eureka客户端和Eureka服务端。
    • Eureka Server:作为服务注册的服务端,他是服务注册中心,系统中其他的微服务,使用Eureka的客户端连接到Eureka 服务端,并维持心跳连接。这样在EurekaServer中的服务注册列表就可以看到所有可用服务的信息。
    • Eureka Client:一个Java客户端,用来简化与服务器的交互、负载均衡,服务的故障切换等。客户端同时也内置一个使用轮询负载均衡的负载均衡算法器,在启动应用后,向Eureka Server发送心跳(默认周期是30s)。如果Eureka在多个心跳周期内没有接收到某个节点的心跳,就会将其从服务注册表中移除(默认周期是90s)。
  • 三大角色
    • Eureka Server:提供服务的注册与发现
    • Eureka Client - Service Provider:将自身的服务注册到Eureka Server中,从而使消费者能够找到。
    • Eureka Clinet - Service Consumer:服务消费方从Eureka Server中获取服务注册列表,从而找到消费服务。

SpringBoot、Spring Cloud 和 Eureka 版本选择

方式一:手动添加依赖

  1. 在官网https://start.spring.io/actuator/info可以看到spring boot和spring cloud的版本对映关系:
    比如:我使用的Spring Boot的版本是2.4.2,那么对应的Spring Cloud的版本是2020.0.0
    在这里插入图片描述
  2. 在maven官网可以看到Spring Cloud 2020.0.0对应的Eureka版本
    https://mvnrepository.com

方式二:Idea自动添加依赖(推荐)

在项目构建中添加模块Model,选择Spring
在这里插入图片描述
先在下拉框选择Spring Boot的版本,然后在Web中选择Spring Web,在Spring Cloud Discovery中选择Eureka的Client或者Server。
在这里插入图片描述
这样,Idea会为我们自己找到和Spring Boot版本对应的Spring Cloud和Eureka版本。

Eureka单机搭建

在这里插入图片描述

搭建Eureka服务端

1、添加Spring Boot、Spring Cloud、Eureka Server的相关依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.ex</groupId><artifactId>eurekaCluster-server-7001</artifactId><version>0.0.1-SNAPSHOT</version><name>eurekaCluster-server-7001</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring-cloud.version>2020.0.0</spring-cloud.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-netflix-eureka-server</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
</project>

2、配置文件进行配置

# 端口
server.port=7001
# 应用名称,会在Eureka中显示
spring.application.name=eurekaserver-7001
# 注册中心的hostname
eureka.instance.hostname=eureka7002
eureka.instance.non-secure-port=${server.port}
# 是否注册自己的信息到EurekaServer,默认是true
eureka.client.register-with-eureka=false
# 是否拉取其它服务的信息,默认是true
eureka.client.fetch-registry=false
# EurekaServer的地址,现在是自己的地址,如果是集群,需要加上其它Server的地址。
eureka.client.service-url.defaultZone=http://localhost:7001/eureka

3、主入口添加注解 @EnableEurekaServer启用eureka server
4、启动eureka服务端,浏览器访问 http://localhost:7001,可以看到看到Eureka Server 监控页面。(目前红框为空,之后服务注册进来会看到类似下面的内容)
在这里插入图片描述

搭建Eureka客户端的服务提供者

1、添加Spring Boot、Spring Cloud、Eureka Client的相关依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.ex</groupId><artifactId>eureka-client-provider-8001</artifactId><version>0.0.1-SNAPSHOT</version><name>eureka-client-provider-8001</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring-cloud.version>2020.0.0</spring-cloud.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-netflix-eureka-client</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
</project>

2、配置文件中进行相关配置

server.port=8001#指定该服务的名字,该名称将在服务被调用时使用
spring.application.name=eureka-client-provider#Eureka配置:服务注册到哪里
eureka.client.service-url.defaultZone=http://localhost:7001/eureka

3、主入口添加注解 @EnableEurekaClient启用eureka client
4、添加controller类,配合使用@RestController注解(Eureka是基于REST的)

//作为服务提供者,要是用 RestController 返回json数据
@RestController
public class DeptController {@GetMapping("/test")public String testSpringCloud(){return "Eureka Client 服务提供者";}
}

5、启动客户端服务提供者

搭建Eureka客户端的服务消费者

1、添加Spring Boot、Spring Cloud、Eureka Client的相关依赖(同上)
2、配置文件中进行配置

server.port=80#指定该服务的名字,该名称将在服务被调用时使用
spring.application.name=eureka-client-consumer#Eureka配置:服务注册到哪里
eureka.client.service-url.defaultZone=http://localhost:7001/eureka

3、主入口添加注解 @EnableEurekaClient启用eureka client
4、创建一个controller来访问服务提供者的服务

/*** 作为服务消费者,可以返回任何形式的数据,这里使用RestController只是为了测试方便返回json数据*/
@RestController
public class TestController {/*** RestTemplate 是一个基于Http协议的工具对象* 我们可以利用这个对象,以http协议发送请求到指定的web服务器中* 在springcloud中可以利用这个对象来访问服务提供者* 这个对象可以new 也可以交给spring来创建(建议交给spring创建-1.配置config 2.@Resource注入对象)*/@GetMapping("/test")public String test() {RestTemplate restTemplate = new RestTemplate();/*** getForEntity 方法:是一个get方法提交请求,访问web服务器中的某个请求* 对应着另一个工程中的@GetMapping或者@RequestMapping* 参数1:需要访问的具体请求路径 参数2:本次请求服务器返回的数据类型 参数3:可变长度的Object类型数据,表示本次请求中的url参数数据* 注意:由于SpringCloud返回的数据类型全部是Rest风格数据,全是String类型的json数据格式,可以根据具体的数据格式来指定返回类型,交给spring,完成封装。* 返回值:ResponseEntity对象,封装着本次请求后的响应体,可以从该对象中获得本次请求的状态码、头文件信息、响应数据*/// 直接通过http访问//ResponseEntity<String> result = restTemplate.getForEntity("http://localhost:8001/test", String.class);// 通过注册中心发现服务并访问服务:EUREKA-CLIENT-PROVIDER就是服务的名称(不区分大小写)ResponseEntity<String> result = restTemplate.getForEntity("http://EUREKA-CLIENT-PROVIDER/test", String.class);System.out.println(result.getStatusCode()); //200 OKSystem.out.println(result.getHeaders());  //[Content-Type:"text/plain;charset=UTF-8", Content-Length:"17", Date:"Thu, 21 Jan 2021 07:03:03 GMT", Keep-Alive:"timeout=60", Connection:"keep-alive"]String body = result.getBody();return "hello, Eureka Client 服务消费----" + body;}
}

5、启动服务消费者
6、访问 http://localhost:80/test 可以看到网页输出:

hello, Eureka Client 服务消费----Eureka Client 服务提供者

Eureka集群搭建

1、项目结构(1个消费者、2个服务提供者、3个注册中心)
在这里插入图片描述
2、修改本机host文件
在这里插入图片描述
3、修改配置文件

Eureka Server:

# 指定服务注册中心的位置
eureka.client.service-url.defaultZone=http://eureka7001:7001/eureka,http://eureka7002:7002/eureka,http://eureka7003:7003/eureka

Eureka Client:(服务提供者和消费者)

#Eureka配置:服务注册到哪里
#同时指定多个注册地址,springcloud底层算法会选择将数据注册到某一个注册中心
eureka.client.service-url.defaultZone=http://eureka7001:7001/eureka,http://eureka7002:7002/eureka,http://eureka7003:7003/eureka

4、启动项目,先启动Eureka Server集群,再启动Eureka Client。
5、在浏览器访问 http://eureka7001:7001、http://eureka7002:7002、http://eureka7003:7003
在这里插入图片描述

eureka 的一些其他配置

# 自我保护模式:关闭以后当服务不能正常向注册中心提交心跳信息时,在指定的时间点以后注册中心就会将这个服务移除掉;开启以后当服务不能正常提交自己的心跳也不会将服务移除;默认是true
eureka.server.enable-self-preservation=false
# 每隔2s向服务端发送一次心跳,证明自己还活着,默认30s
eureka.instance.lease-renewal-interval-in-seconds=2
# 告诉服务端如果我10s之内没有给你发送心跳代表我故障了,把我移除
eureka.instance.lease-expiration-duration-in-seconds=10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | XQA:一个跨语言开放域问答数据集

论文笔记整理&#xff1a;刘晓臻&#xff0c;东南大学计算机科学与工程学院本科生。Citation: Liu, J., Lin, Y., Liu, Z., & Sun, M. (2019,July). XQA: A Cross-lingual Open-domain Question Answering Dataset. InProceedings of the 57th Conference of the Associati…

深度CTR预估模型中的特征自动组合机制演化简史

文 | 杨旭东源 | 知乎众所周知&#xff0c;深度学习在计算机视觉、语音识别、自然语言处理等领域最先取得突破并成为主流方法。但是&#xff0c;深度学习为什么是在这些领域而不是其他领域最先成功呢&#xff1f;我想一个原因就是图像、语音、文本数据在空间和时间上具有一定的…

LeetCode 94. 二叉树的中序遍历(中序遍历)

文章目录1. 题目信息2. 解题2.1 递归2.2 循环&#xff0c;必须掌握1. 题目信息 给定一个二叉树&#xff0c;返回它的中序 遍历。 示例:输入: [1,null,2,3]1\2/3输出: [1,3,2]进阶: 递归算法很简单&#xff0c;你可以通过迭代算法完成吗&#xff1f; 来源&#xff1a;力扣&am…

想进美团不知道选哪个技术岗位?这里有一份通关秘籍!

春暖花开&#xff0c;美团春招已经启动&#xff0c;针对校招和社招开放了几千个职位&#xff0c;其中很大部分都是技术岗位。 随着互联网的高速发展&#xff0c;技术岗位在不断地细分&#xff0c;比如软件开发不仅分为前端和后端&#xff0c;前端会分为Web、iOS和Android三个方…

哈工大LTP本地安装及python调用

原文链接&#xff1a;https://blog.csdn.net/yangfengling1023/article/details/84559848 LTP即哈工大语言技术平台云&#xff0c;是基于云计算技术的中文自然语言处理服务平台 在线使用的网址&#xff1a;https://www.ltp-cloud.com/ github网址&#xff1a;https://github.c…

Nginx 简介和使用

Nginx简介Nginx发展介绍Nginx作者正向代理和反向代理概念网站代理服务器查看Nginx环境搭建下载安装前准备安装启动检测Nginx是否启动关闭重启Nginx核心配置文件说明Nginx主要功能1、静态网站部署2、负载均衡负载均衡概述负载均衡实现方式Nginx负载均衡策略负载均衡其他配置3、静…

论文浅尝 | 将文本建模为关系图,用于联合实体和关系提取

论文笔记整理&#xff1a;余海阳&#xff0c;浙江大学硕士&#xff0c;研究方向为知识图谱、自然语言处理。链接&#xff1a;https://www.aclweb.org/anthology/P19-1136动机本文提出了一种利用图卷积网络&#xff08;GCNs&#xff09;联合学习命名实体和关系抽取的端到端抽取模…

LeetCode 144. 二叉树的前序遍历(前序遍历)

文章目录1. 题目信息2. 解题2.1 递归2.2 循环&#xff0c;必须掌握1. 题目信息 给定一个二叉树&#xff0c;返回它的 前序 遍历。 示例:输入: [1,null,2,3] 1\2/3 输出: [1,2,3]进阶: 递归算法很简单&#xff0c;你可以通过迭代算法完成吗&#xff1f; 来源&#xff1a;力扣…

设计模式在外卖营销业务中的实践

一、前言 随着美团外卖业务的不断迭代与发展&#xff0c;外卖用户数量也在高速地增长。在这个过程中&#xff0c;外卖营销发挥了“中流砥柱”的作用&#xff0c;因为用户的快速增长离不开高效的营销策略。而由于市场环境和业务环境的多变&#xff0c;营销策略往往是复杂多变的&…

RabbitMQ 简介和使用

RabbitMQ一、RabbitMQ概述1、什么是消息队列2、为什么要使用消息队列3、RabbitMQ特点二、RabbitMQ安装1、安装前准备1.1 依赖包安装1.2 安装Erlang2、安装3、常用命令3.1. 启动和关闭3.2. 插件管理3.3. 用户管理3.4. 权限管理3.5. vhost管理三、RabbitMQ消息发送和接收1、 Rabb…

Transformer哪家强?Google爸爸辨优良!

文&#xff1a;Zilong2017年Attention is all you need横空出世&#xff0c;Transformer横扫机器翻译&#xff0c;隔年诞生的BERT建立在层层堆叠的Transformer之上&#xff0c;凭借这个平平无奇的Attention点乘模型一举刷新了各种沉积许久的榜单&#xff0c;一夜间仿佛不懂Tran…

CCKS 2019 | 百度 CTO 王海峰详解知识图谱与语义理解

本文转载自公众号&#xff1a;机器之心。&#xff1b; 8 月 24 日至 27 日在杭州召开的 2019 年全国知识图谱与语义计算大会&#xff08;CCKS 2019&#xff09;上&#xff0c;百度 CTO 王海峰发表了题为《知识图谱与语义理解》的演讲。CCKS 2019 由中国中文信息学会语言与知识计…

LeetCode 145. 二叉树的后序遍历(后序遍历总结)

文章目录1. 题目信息2. 解法2.1 递归2.2 循环&#xff0c;必须掌握a. 单栈b. 双栈解法3. 前中后序总结1. 题目信息 给定一个二叉树&#xff0c;返回它的 后序 遍历。 示例:输入: [1,null,2,3] 1\2/3 输出: [3,2,1]进阶: 递归算法很简单&#xff0c;你可以通过迭代算法完成吗…

云原生之容器安全实践

概述 云原生&#xff08;Cloud Native&#xff09;是一套技术体系和方法论&#xff0c;它由2个词组成&#xff0c;云&#xff08;Cloud&#xff09;和原生&#xff08;Native&#xff09;。云&#xff08;Cloud&#xff09;表示应用程序位于云中&#xff0c;而不是传统的数据中…

领域应用 | HiTA知识图谱 “药品-适应证”图谱数据发布!

本文转载自公众号&#xff1a;OMAHA联盟。2019年8月&#xff0c;OMAHA对HiTA知识图谱服务平台&#xff08;kg.omaha.org.cn&#xff09;进行了更新&#xff0c;同步发布了医学知识图谱表达模型&#xff08;schema&#xff09;。2019年9月17日&#xff0c;首次发布了由OMAHA研发…

主题模型综述:短文本、细粒度、加入先验知识、作者写作偏好、主题内涵随时间的变迁、融入词嵌入特性、语言模型加持

原文链接&#xff1a;https://www.zhihu.com/question/34801598/answer/765580727 主题模型当然有用咯&#xff0c;谁用谁知道&#xff01;这次我来展示下它的7个“变种”(短文本、细粒度、加入先验知识、作者写作偏好、主题内涵随时间的变迁、融入词嵌入特性、语言模型加持)&a…

完全解析:使用Faiss进行海量特征的相似度匹配

文 | Gemfield源 | 知乎Faiss为稠密向量提供高效相似度搜索和聚类&#xff0c;支持十亿级别向量的搜索&#xff0c;是目前最为成熟的近似近邻搜索库。本文从最基本的特征比对开始讲解&#xff0c;中间详细讲解Faiss的环境配置以及使用步骤&#xff0c;最后落脚到为什么我们需要…

LeetCode 173. 二叉搜索树迭代器(中序遍历)

文章目录1. 题目信息2. 二叉树中序遍历1. 题目信息 实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。 调用 next() 将返回二叉搜索树中的下一个最小的数。 示例&#xff1a; BSTIterator iterator new BSTIterator(root); iterator.next(); // 返…

论文浅尝 | 面向时序知识图谱推理的循环事件网络

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为知识库问答。来源&#xff1a;arXiv (short version accepted at ICLR 2019Workshop on Representation Learning on Graphs and Manifolds)链接&#xff1a;https://arxiv.org/abs/1904.05530…

Android实现炫酷的星空变幻效果

二话不说&#xff0c;先上效果图&#xff1a; 这个图是什么意思呢&#xff0c;有没有看到一直在变颜色啊&#xff0c;有没有很像星云变幻呢&#xff0c;有没有很炫&#xff0c;快来看看怎么实现的吧&#xff01; 这是我们要被处理的原图&#xff0c;实现方式就是通过不断的改变…