【SpringCloud微服务--Eureka服务注册中心】

news2024/11/29 8:57:08

SpringCloud微服务全家桶学习笔记【持续更新】

gitee仓库
内容:SpringCloud + SpringCloud alibaba

技术栈:Java8+maven+git,github+Nginx+RabbitMQ+SpringBoot2.0

微服务架构概述

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API)。每个服务都围绕具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言应根据业务上下文,选择合适的语言、工具对其进行构建
在这里插入图片描述
主流技术框架

功能框架
服务注册中心Eureka,Zookeeper,Consul,Nacos
服务调用Ribbon,LoadBalancer
服务调用2Feign,OpenFeign
服务降级Hydtrix,Resilience4j,Sentienl
服务网关Zuul,Zuul2,GateWay
服务配置Config,Nacos
服务总线Bus,Nacos

开发环境及相关框架版本

框架版本
cloudHoxton.SR1
boot2.2.2.RELEASE
cloud alibaba2.1.0.RELEASE
java1.8
maven3.8.2,3.5以上即可
mysql5.7及以上

项目搭建

新建project工作空间和项目结构及父工程pom依赖版本声明
在搭建项目时:
约定>配置>编码
在父工程pom文件中声明依赖版本等约束

父工程pom文件配置

dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。

<!--统一jar包版本管理-->
  <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>
      <junit.version>4.12</junit.version>
      <log4j.version>1.2.17</log4j.version>
      <lombok.version>1.16.18</lombok.version>
      <mysql.version>5.1.47</mysql.version>
      <druid.version>1.1.16</druid.version>
      <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
  </properties>
<!--子模块继承之后,提供作用:锁定版本+子模块不需要写groupId和version-->
  <dependencyManagement>
    <dependencies>
      <!--spring boot 2.2.2-->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.2.2.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
<!--      spring cloud Hoxton.SR1-->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Hoxton.SR1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
<!--      spring cloud alibaba 2.1.0.RELEASE-->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
      </dependency>
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>${mybatis.spring.boot.version}</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
      </dependency>
      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
        <optional>true</optional>
      </dependency>
    </dependencies>
  </dependencyManagement>

1.构建微服务模块流程

  1. 建module
  2. 改pom
  3. 写yml
  4. 主启动类
  5. 业务类

2.微服务搭建

Eureka基础知识

1.什么是服务治理

​ Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理

在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

2.什么是服务注册与发现

Eureka采用了CS的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。
在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息 比如 服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用RPC远程调用框架核心设计思想:在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何rpc远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址))
在这里插入图片描述

3.Eureka包含两个组件:Eureka Server和Eureka Client
Eureka Server提供服务注册服务

各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。

EurekaClient通过注册中心进行访问

是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robbin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

4.Eureka集群管理原理

在这里插入图片描述

5.Eureka模拟集群

修改C:\Windows\System32\drivers\etc中hosts文件
在这里插入图片描述

在文件中添加

在这里插入图片描述

以此来模拟集群,服务将可以注册到三个服务注册中心中,当某一个注册中心宕机后,并不影响业务

6.负载均衡

在这里插入图片描述

将处理同一业务的服务部署在不同的服务器上,当访问量过大时,可分流访问不同的服务器

订单服务访问地址不能写死
在这里插入图片描述

使用@LoadBalanced注解赋予RestTemplate负载均衡的能力

在这里插入图片描述
先要启动EurekaServer,7001/7002服务

再要启动服务提供者provider,8001/8002服务

使用客户端8080端口访问:http://localhost:8080/consumer/payment/get/3

访问结果:每一次请求都轮循访问8001/8002

Ribbon和Eureka整合后Consumer可以直接调用服务而不用再关心地址和端口号,且该服务还有负载功能了。O(∩_∩)O

7.服务发现discovery

主启动类配置@EnableDiscoveryClient注解

控制类添加字段 private DiscoveryClient discoveryClient;
在这里插入图片描述
通过访问可以验证,此方法可获得服务相关信息

8.Eureka自我保护机制

概述
保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,
Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。

如果在Eureka Server的首页看到以下这段提示,则说明Eureka进入了保护模式:
在这里插入图片描述

为什么会产生Eureka自我保护机制?
为了防止EurekaClient可以正常运行,但是 与 EurekaServer网络不通情况下,EurekaServer不会立刻将EurekaClient服务剔除

什么是自我保护模式?
默认情况下,如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳,EurekaServer将会注销该实例(默认90秒)。但是当网络分区故障发生(延时、卡顿、拥挤)时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过“自我保护模式”来解决这个问题——当EurekaServer节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。

在这里插入图片描述

在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。
它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。一句话讲解:好死不如赖活着

综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留)也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。

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

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

相关文章

sqlserver 各种集合、区间、 时间轴(持更)

1.所有有交集的区间 场景&#xff1a;在事件表里查找某年员工的岗位系数&#xff0c;并计算其加权平均数。case1&#xff1a;该员工是老员工&#xff0c;从2020年一直到2049年。case2&#xff1a;该员工是老员工&#xff0c;但是今年离职。case3&#xff1a;该员工是今年的新员…

亚马逊云科技与伊克罗德推出AI绘画解决方案——imAgine

在过去的数月中&#xff0c;亚马逊云科技已经推出了多篇介绍如何在亚马逊云科技上部署Stable Diffusion&#xff0c;或是如何结合Amazon SageMaker与Stable Diffusion进行模型训练和推理任务的内容。 为了帮助客户快速、安全地在亚马逊云科技上构建、部署和管理应用程序&#x…

OpenCV之形态学操作

形态学操作包含以下操作&#xff1a; 腐蚀 (Erosion)膨胀 (Dilation)开运算 (Opening)闭运算 (Closing)形态梯度 (Morphological Gradient)顶帽 (Top Hat)黑帽(Black Hat) 其中腐蚀和膨胀操作是最基本的操作&#xff0c;其他操作由这两个操作变换而来。 腐蚀 用一个结构元素…

谷歌Chrome庆祝15周年,推出全新设计!了解最新信息!

谷歌浏览器本月将满15岁&#xff0c;为了纪念这一时刻&#xff0c;它正在进行改造和升级。 这一点意义重大&#xff0c;因为Chrome在全球有数十亿人使用&#xff0c;因此谷歌所做的每一项改变都会对互联网以及这些人与互联网的互动方式产生巨大影响。即使你不使用Chrome或不关…

深入了解HTTP代理的工作原理

HTTP代理是一种常见的网络代理方式&#xff0c;它可以帮助用户隐藏自己的IP地址&#xff0c;保护个人隐私和安全。了解HTTP代理的工作原理对于使用HTTP代理的用户来说非常重要。本文将深入介绍HTTP代理的工作原理。 代理服务器的作用 HTTP代理的工作原理基于代理服务器的作用。…

一文讲透【静态脱敏实操】

1&#xff1a;直接上工具类 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version> </dependency>2:Hutool 支持的脱敏数据类型 现阶段最新版本的 Hutool 支持的脱敏数据类…

浅析目标检测入门算法:YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4

本文致力于让读者对以下这些模型的创新点和设计思想有一个大体的认识&#xff0c;从而知晓YOLOv1到YOLOv4的发展源流和历史演进&#xff0c;进而对目标检测技术有更为宏观和深入的认知。本文讲解的模型包括&#xff1a;YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4…

LaTeX总结-2023年9月8日

1. LaTeX总结 文章目录 1. LaTeX总结1.1. 定义作者&#xff0c;通讯作者&#xff0c;地址&#xff0c;宏包1.1.1. Example 11.1.2. Example 21.1.3. 特殊符号——作者标注注 1.2. 调整字体1.2.1. 数学模式下使用正体1.2.2. LaTeX内使用中文1.2.3. 正文文字 1.3. 常用符号及字母…

java - lua - redis 完成商品库存的删减

java调用lua脚本完成对商品库存的管理 主页链接 微风轻吟挽歌的主页 如若有帮助请帮忙点赞 //lua脚本 获取到内存不够的商品StringBuilder sb new StringBuilder();//定义一个数组存储可能缺少库存的值sb.append(" local table {} ");//获取值sb.append(" …

Java中的内部类

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;什么是内部类&#x1f415;内部类的分类&#x1f9f8;成员内部类&#x1f9f8;静态内部类&#x1f9f8;局部内部类&#x1f9f8;匿名内部类 &#x1f415;内部类的特点&a…

navicat设置mysql自动根据插入时间更新时间

使用navicat时间字段要素根据当前数据插入时间自动填充&#xff0c;可设置now()函数

CentOS 8 通过YUM方式升级最新内核

CentOS 8 通过YUM方式升级最新内核 查看当前内核 uname -r 4.18.0-193.6.3.el8_2.x86_64导入 ELRepo 仓库的公钥&#xff1a; rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org安装升级内核相关的yum源仓库(安装 ELRepo 仓库的 yum 源) yum install https://www…

栈和队列的概念及实现

文章目录 一、栈1.栈的概念2.数组作为顺序栈存储方式特点3.链栈特点4.代码实现栈(1).Stack.h(2).Stack.c(3).Test.c 二、队列2.区分顺序存储的队空和队满的三种处理方式3.代码实现(1).Quene.h(2).Quene.c 一、栈 1.栈的概念 栈的本质就是线性表&#xff0c;但它和队列一样&…

Nginx 学习(九)集群概述与LVS工作模式的配置

一 集群 1 概述 通过高速网络将很多服务器集中起来一起提供同一种服务&#xff0c;在客户端看来就像是只有一个服务器可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益任务调度是集群系统中的核心技术 2 目的 提高性能。如计算密集型应用&…

记LGSVL Map Annotation使用

导入点云 内置的点云导入器工具提供了将最流行的点云文件格式&#xff08;PCD、PLY、LAS、LAZ&#xff09;转换为可用于仿真的数据所需的所有功能。 要访问点云导入器窗口&#xff0c;请在 Unity 编辑器中打开模拟器项目&#xff0c;然后导航到 Simulator/Import Point Cloud…

java 前缀树的实现,敏感词的匹配和标记

目录 一、前缀树的介绍和定义1.前缀树的定义2.前缀树的结构 二、前缀树的实现1.向前缀树中增加词语2.向前缀树中删除词语3.对于使用前缀树进行词语标识&#xff1a;4.前缀树的实现代码 三、前缀树使用及测试1.向前缀树上增加词语2.根据输入匹配前缀树上的词语3.判断前缀树上是否…

Java 基于SpringBoot+Vue的社区医院管理系统的实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1、效果演示2、 前言介绍3. 技术栈4系统设计4.1数据库设计4.2系统整体设计4.2.1 系统设计思想4.2.…

加拿大CCPSA-SOR/2016-152(婴儿床、摇篮和婴儿摇篮法规)认证要求解答

亚马逊加拿大站儿童床垫CCPSA认证: ●SOR/2016-152&#xff08;婴儿床、摇篮和婴儿摇篮法规&#xff09; ●SOR/2018-83&#xff08;含铅消费品法规&#xff09; ●SOR/2016-193&#xff08;表面涂层材料法规 - 铅&#xff09; ●SOR/2016-188&#xff08;邻苯二甲酸盐&…

大漠插件普通定制版内存调用与com对象调用方法

首先.打开大漠类库生成工具.拖入定制版的dll文件会生成各个语言的调用例子 如下图所示 详见视频教程 大漠插件普通定制版内存调用与com对象调用方法