微服务框架

article/2025/8/27 9:55:24

这里写自定义目录标题

    • 微服务框架功能
    • Spring Cloud简介
    • Eureka简介
    • Eureka⼊⻔
    • 源码解析
      • Eureka的⼀些概念
    • Register 服务注册

微服务框架功能

微服务具有以上的这些特点,那么作为⼀个微服务框架,⽐如Spring Cloud,应该具备⼀些什么功能
呢?微服务框架的功能主要体现在以下⼏个⽅⾯:

  1. 注册中⼼ :服务提供者和消费者,能够从注册中⼼注册和得到服务信息;
  2. 配置中⼼:在微服务架构中设计服务较多需要对于配置⽂件统⼀管理;
  3. 服务链路追踪:对于服务之间的负载调⽤,要能通过链路追踪,得到具体参与者,调⽤链路出现问题能够快速定位;
  4. 负载均衡 :服务调⽤服务会采⽤⼀定的负载均衡策略,来保证服务的⾼可⽤;
  5. 服务容错:通过熔断、降级服务容错策略,对系统进⾏有效的保护,降级是在服务或依赖的服务异
    常时,返回保底数据,熔断是指依赖服务多次失效,则熔断器打开,不再尝试调⽤,直接返回降级
    信息。熔断后,定期探测依赖服务可⽤性,若恢复则恢复调⽤;
  6. 服务⽹关 :⽤户请求过载时进⾏限流、排队、过载保护、⿊⽩名单、异常⽤户过滤拦截等都可以通过服务⽹关实现。;
  7. 服务发布与回滚:蓝绿部署、灰度、AB Test等发布策略,可快速回滚应⽤;
  8. 服务动态伸缩、容器化 :根据服务负载情况,可快速⼿动或⾃动进⾏节点增加和减少。

Spring Cloud简介

Spring Cloud是Spring提供的微服务框架。它利⽤Spring Boot的开发特性简化了微服务开发的复
杂性,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,这些⼯作都可以借助
Spring Boot的开发⻛格做到⼀键启动和部署。
Spring Cloud的⽬标是通过⼀系列组件,帮助开发者迅速构件⼀个分布式系统,Spring Cloud 是通
过包装其它公司产品来实现的,⽐如Spring Cloud整合了开源的Netflix很多产品。Spring Cloud提供了
微服务治理的诸多组件,例如服务注册和发现、配置中⼼、熔断器、智能路由、微代理、控制总线、全
局锁、分布式会话等。
Spring Cloud组件⾮常多,涉及微服务开发的诸多场景,本节主要介绍Spring Cloud以及最为基础
的Spring Cloud 五⼤组件,后续在进⾏详细的学习。Spring Cloud的架构图如图1-5所示。
在这里插入图片描述
Spring Cloud实现微服务的治理功能产品很多,下⾯简单介绍下Spring Cloud各个产品的作⽤,以
及采⽤的原则,如图1-6所示
在这里插入图片描述

Spring提供了⼀个RestTemplate模板⼯具类,对基于Http的客户端进⾏了封装,并且实现了对象与json
的序列化和反序列化,⾮常⽅便。RestTemplate并没有限定Http的客户端类型,⽽是进⾏了抽象,⽬前
常⽤的3种都有⽀持:
** HttpClient
** OkHttp
** JDK原⽣的URLConnection(默认的)

Eureka简介

和Zookeeper类似,Eureka是⼀个⽤于服务注册和发现的组件,最开始主要应⽤与亚⻢逊公司的云
计算服务平台AWS,Eureka分为Eureka Server和Eureka Client,Eureka Server为Eureka服务注册中
⼼,Eureka Client为Eureka客户端。
举个例⼦:Eureka好⽐滴滴⽹约⻋平台,没有滴滴时,⼈们出⻔叫⻋只能叫出租⻋。⼀些私家⻋想
做出租却没有资格,被称为⿊⻋。⽽很多⼈想要约⻋,但是⽆奈出租⻋太少,不⽅便。私家⻋很多却不
敢拦,⽽且满⼤街的⻋,谁知道哪个才是愿意载⼈的。⼀个想要,⼀个愿意给,就是缺少引⼦,缺乏管
理啊。
此时滴滴这样的⽹约⻋平台出现了,所有想载客的私家⻋全部到滴滴注册,记录你的⻋型(服务类
型),身份信息(联系⽅式)。这样提供服务的私家⻋,在滴滴那⾥都能找到,⼀⽬了然。
此时要叫⻋的⼈,只需要打开APP,输⼊你的⽬的地,选择⻋型(服务类型),滴滴⾃动安排⼀个
符合需求的⻋到你⾯前,为你服务,完美!
Eureka相当于微服务架构中的“滴滴”。负责微服务的注册和发现⼯作,它记录了服务和服务地址的
映射关系。在分布式架构中,服务会注册到Eureka注册中⼼,当服务需要调⽤其它服务时,就从Eureka
找到服务的地址,进⾏调⽤。Eureka在Spring Cloud中的作⽤是⽤来作为服务治理实现服务注册和发
现。Eureka主要涉及到三⼤⻆⾊:服务提供者、服务消费者、注册中⼼。
服务注册是指,各个微服务在启动时,将⾃⼰的⽹络地址等信息注册到Eureka,服务提供者将⾃⼰
的服务信息,如服务名、IP等告知服务注册中⼼。
服务发现是指当⼀个服务消费者需要调⽤另外⼀个服务时,服务消费者从Eureka查询服务提供者的
地址,并通过该地址调⽤服务提供者的接⼝。⼀个服务既可以是服务消费者,也可以是服务发现者。
各个微服务与注册中⼼使⽤⼀定机制(例如⼼跳)通信。如果Eureka与某微服务⻓时间⽆法通信,
Eureka会将该服务实例从服务注册中⼼中剔除,如果剔除掉这个服务实例过了⼀段时间,此服务恢复⼼
跳,那么服务注册中⼼将该实例重新纳⼊到服务列表中,Eureka架构图,如图2-1所示。
在这里插入图片描述

Eureka⼊⻔

Eureka的基本使⽤,创建Eureka Server,让后将上⾯⽀付微服务,和订单微服务注册到
Eureka Server中。Eureka基本机构主要包括以下3个⻆⾊。
.Eureka Server:服务注册中⼼,提供服务注册和发现功能。
Provider Service:服务提供者,案例中就是⽀付微服务。
Consumer Service:服务消费者,案例中就是订单微服务。

源码解析

Eureka的⼀些概念

Register — 服务注册
当Eureka Client向Eureka Server注册时,Eureka Client提供⾃身的元数据,⽐如IP地址、端⼝、
运⾏状况指标的URL,主⻚地址等信息。
Renew — 服务续约
Eureka Client在默认情况下会每隔30秒发送⼀次⼼跳来进⾏服务续约,通过服务续约来告知
Eureka Server该Eureka Client依然可⽤,正常情况下,如果Eureka Server在90秒内没有收到Eureka
Client的⼼跳,Eureka Server会将Eureka Client实例从注册列表中删除,注意:官⽹建议不要更改服
务续约的间隔时间。
Fetch Registries — 获取服务注册列表信息
Eureka Client从Eureka Server获取服务注册表信息,并将其缓存到本地。Eureka Client 会使⽤服
务注册列表信息查找其他服务的信息,从⽽进⾏远程调⽤,改注册列表信息定时(每隔30秒)更新⼀
次,每次返回的注册列表信息可能与Eureka Client的缓存信息不同,Erueka Client会重新获取整个注
册表信息。Eureka Server缓存了所有的服务注册表信息,并且进⾏了压缩。Eureka Client和Eureka
Server可以使⽤json和xml的数据格式进⾏通信,默认,Eureka Client使⽤JSON格式⽅式来获取服务器
注册列表信息。
Cancel — 服务下线
Eureka Client在程序关闭时可以向Eureka Server发送下线请求,发送请求后,该客户端的实例信
息将从Eureka Server的服务注册列表信息中删除。改下线请求不会⾃动完成,需要在程序关闭时调⽤
以下代码
DiscoveryManager.getInstance().shutdownComponent();

Eviction — 服务
在默认情况下,Eureka Client连续90秒没有想Eureka Server发送服务续约(⼼跳)时,Eureka
Server会将该服务实例从服务列表中删除。即服务剔除。

Register 服务注册

Eureka Client源码
Eureka Client向Eureka Server提交⾃⼰的服务信息,包括IP、端⼝、ServiceId等信息。如果
Eureka Client没有配置ServiceId,则默认为配置⽂件中的配置的服务名,即
${spring.application.name}的值。
(1)DiscoveryClient初始化⽅法initScheduledTasks⽅法
该⽅法主要开启了获取服务注册列表的信息,如果需要向Eureka Server注册,则开启注册,
同时开启了定时任务向Eureka Server服务续约,代码如下。

/**
* Initializes all scheduled tasks.
*/
private void initScheduledTasks() {if (clientConfig.shouldFetchRegistry()) {...//省略了任务调度获取注册列表的代码。}if (clientConfig.shouldRegisterWithEureka()) {...// Heartbeat timerheartbeatTask = new TimedSupervisorTask("heartbeat",scheduler,heartbeatExecutor,renewalIntervalInSecs,TimeUnit.SECONDS,expBackOffBound,new HeartbeatThread());
scheduler.schedule(heartbeatTask,renewalIntervalInSecs, TimeUnit.SECONDS);// InstanceInfo replicatorinstanceInfoReplicator = new InstanceInfoReplicator(this,instanceInfo,clientConfig.getInstanceInfoReplicationIntervalSeconds(),2); // burstSize...}
}

(2) instanceInfoReplicator类
initScheduledTasks⽅法中,定时任务调⽤instanceInfoReplicator类,instanceInfoReplicator类
继承Runable接⼝,run⽅法代码如下。

public void run() {try {discoveryClient.refreshInstanceInfo();Long dirtyTimestamp = instanceInfo.isDirtyWithTime();if (dirtyTimestamp != null) {discoveryClient.register();instanceInfo.unsetIsDirty(dirtyTimestamp);}} catch (Throwable t) {logger.warn("There was a problem with the instance inforeplicator", t);} finally {Future next = scheduler.schedule(this,replicationIntervalSeconds, TimeUnit.SECONDS);scheduledPeriodicRef.set(next);}
}

(3)DiscoveryClient的register⽅法
在com.netflix.discovery包下的DiscoveryClient类中有⼀个register()⽅法,该⽅法通过Http请求向
Eureka Server注册,代码如下所示。

boolean register() throws Throwable {logger.info(PREFIX + "{}: registering service...",appPathIdentifier);EurekaHttpResponse<Void> httpResponse;try {httpResponse =eurekaTransport.registrationClient.register(instanceInfo);} catch (Exception e) {logger.warn(PREFIX + "{} - registration failed {}",appPathIdentifier, e.getMessage(), e);throw e;}if (logger.isInfoEnabled()) {logger.info(PREFIX + "{} - registration status: {}",appPathIdentifier, httpResponse.getStatusCode());}return httpResponse.getStatusCode() ==Status.NO_CONTENT.getStatusCode();
}

http://chatgpt.dhexx.cn/article/22UybdUj.shtml

相关文章

微服务框架springcloud

基础 单体架构&#xff1a;将业务全部功能集中到一个项目中&#xff0c;打成一个war包存储,部署在一台服务器中&#xff0c;只有一个数据库 优点 &#xff1a;架构简单&#xff0c;部署成本低。适合小型项目 问题&#xff1a;高并发性能问题&#xff0c;开发时代码耦合问题&…

微服务框架的介绍

一、什么是微服务 微服务并没有一个官方的定义&#xff0c;可以理解为一种架构风格&#xff0c;将一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署&#xff0c;各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在…

第六篇:微服务框架(SpringBoot、SpringCloud)

目录 一. 微服务框架 1. 微服务架构概念 2. 微服务的利与弊&#xff08;为什么要用微服务&#xff09; 二. SpringBoot 1. SpringBoot是什么&#xff1f; 2. SpringBoot核心注解是什么&#xff1f; 3. 什么是SpringBoot的自动配置&#xff1f;原理是什么&#xff1f; 4…

DLL文件的创建和调用

文章目录 前言一、DLL的优势二、使用步骤1.创建DLL文件2.调用DLL文件 总结 前言 动态数据库 (DLL) 是作为共享函数库的可执行文件。动态数据库提供了一种方法&#xff0c;使进程可以调用不属于其可执行代码的函数。本文将对DLL的创建和调用步骤进行保姆级讲解。 一、DLL的优势…

C# 调用 dll 文件

一、先使用C来创建一个 .dll 文件 1、创建新项目&#xff1a;CreateDll01 2、选择 “动态链接库(.dll)” 文件 3、在 CreateDll01.cpp 源文件中添加如下代码 // CreateDll01.cpp : 定义 DLL 应用程序的导出函数。 //#include "stdafx.h"extern "C" __decl…

dll是什么呢?dll丢失如何解决?

DLL的概念 DLL(Dynamic Link Library)文件为动态链接库文件&#xff0c;又称“应用程序拓展”&#xff0c;是软件文件类型。在Windows中&#xff0c;许多应用程序并不是一个完整的可执行文件&#xff0c;它们被分割成一些相对独立的动态链接库&#xff0c;即DLL文件&#xff0…

C++ 制作动态链接库.dll及.dll使用

声明&#xff1a;IDE是Visual studio -version 2022 其制作的动态链接库dll里面实现简单的加减法&#xff0c;提供给其他项目调用。 一、动态链接库&#xff08;DLL&#xff09;创建 1、创建DLL工程 流程&#xff1a;文件 -> 新建 -> 项目 -> 动态链接库&#xf…

.dll、.lib、.dll.a 的区别

我们已 ffmpeg 的动态链接库为例&#xff0c;描述一下这三个文件的作用&#xff1a; 目录整体结构&#xff1a; 分析 bin 目录&#xff1a; ffmpeg、ffplay、ffprobe 之所以这么小&#xff0c;是因为他们运行的时候会调用 .dll 文件当中的代码。dll&#xff1a;真正存放函数…

Java调用dll文件

目录 1 C创建dll 1.1 项目与工具 1.2 步骤与代码 2 Java使用JNA调用dll 2.1 项目与工具 2.2 步骤与代码 3 实际效果 4 参考链接 1 C创建dll 1.1 项目与工具 Visual Studio 2019 1.2 步骤与代码 ①使用VS创建动态链接库&#xff08;DLL&#xff09;项目 ②设置项目名与…

什么是dll文件

动态链接库&#xff08;Dynamic Link Library 或者 Dynamic-link Library&#xff0c;缩写为 DLL&#xff09;&#xff0c;是微软公司在微软Windows操作系统中&#xff0c;实现共享函数库概念的一种方式。这些库函数的扩展名是 ”.dll"、".ocx"&#xff08;包含…

什么是dll

DLL的概念 DLL(Dynamic Link Library)文件为动态链接库文件&#xff0c;又称“应用程序拓展”&#xff0c;是软件文件类型。在Windows中&#xff0c;许多应用程序并不是一个完整的可执行文件&#xff0c;它们被分割成一些相对独立的动态链接库&#xff0c;即DLL文件&#xff0c…

XWiKi 部分汉化

一、进入XWiki首页&#xff0c;用管理员进行登陆 账号&#xff1a;superadmin 密码&#xff1a;system 登陆后点击右上角&#xff0c;如下图所示 二、点开管理页面 如下图所示&#xff1a; 三、搜索localization 四、按照图中进行修改 然后部分汉化就完成了 当然&#xff0c;如…

XWiKi 汉化

进入XWiKi主页&#xff0c;然后点击菜单栏&#xff0c;进入管理&#xff0c;汉化前图片显示&#xff1a; 汉化后图片显示 一、进入安装目录/xwiki/WEB-INF/lib/下找到xwiki-platform-legacy-oldcore-10.7.jar 二、用zip解压软件进入xwiki-platform-legacy-oldcore-10.7.jar不要…

xwiki开发指南1-使用XWiki创建FAQ应用

本文是按照XWiki官网开发指南-FAQ应用创建&#xff0c;自己翻译总结的版本。 此篇含有大量图片&#xff0c;关于XWiki的开发&#xff0c;将在下一篇讲解。 关于XWiki的部署也会单独写一篇基于docker的部署文。 使用XWiki创建FAQ应用 1.首先下载并部署XWiki&#xff08;之后会…

【Wiki】XWiki安装教程_War包版本

目录 0、XWiki说明1、war包安装说明1.1、环境说明1.2、如果懒得下载可以使用这边准备好的物料包汇总 2、war包安装2.1、Tomcat安装2.2、java安装(需要root权限)2.3 、使用 source /etc/profile 刷新linux配置2.4、数据库安装2.5、解压war包与xip2.6、修改配置文件2.6.1、修改WE…

xwiki搭建

一、Xwiki简介 XWiki是一个由Java编写的基于LGPL协议发布的开源wiki和应用平台。XWiki是一款基于java所编写的wiki&#xff0c;它可以运行在如Tomcat&#xff0c;Jetty&#xff0c;JBoss&#xff0c;WebLogic&#xff0c;WebSphere等Servlet容器上并利用关系型数据库(HS…

XWiki在Windows上部署

简单介绍 XWiki是一款Java开发的开源文档管理系统&#xff0c;它简单易用&#xff0c;拥有强大的权限管理功能。 部署条件 JDK11&#xff08;需要注意&#xff1a;14版本之后需要JDK11以上&#xff09;、Tomcat9&#xff0c;XWiki 部署过程 JDK和Tomcat的部署我就贴个参考链…

开源框架XWIKI搭建介绍

原文地址&#xff1a;http://john88wang.blog.51cto.com/2165294/1605787 一 应用背景描述 在平时的运维工作中&#xff0c;把常规工作进行文档整理非常重要&#xff0c;无论是平时工作处理或是工作交接&#xff0c;实时的维护文档资料可以提高工作效率。如果采用传统的TXT文档…

xwiki安装使用以及问题解决

环境要求&#xff1a; jdk1.8 安装步骤&#xff1a; xwiki的war包下载地址&#xff1a;https://www.xwiki.org/xwiki/bin/view/Download/DownloadVersion/?projectVersion10.11.2 第一步&#xff1a;在tomcat的webapps文件下创建xwiki文件夹&#xff0c;将war包上传至xwik…

CentOS 7安装XWiki

目录 前言 安装步骤 安装JDK 11 安装Tomcat 9 安装xwiki 13.10.10 安装Postgres 13 设置xwiki数据路径 参考 前言 本文介绍如何在CentOS 7安装xwiki。JDK 11 Tomcat 9 xwiki 13 Postgres 13。CentOS用vagrant虚拟化的。本文代码已开源 安装步骤 安装xwiki有四个主…