当前位置: 首页 > news >正文

sentinel客户端和dashboard交互

回顾

在前面的章节中:通过阐述sentinel简单使用、滑动窗口、核心流程源码分析把sentinel限流、熔断等主要功能说明清楚了,但我们在实际使用的过程中,不可能通过硬编码的方式设置规则,且规则也没法直观的维护,为此肯定是需要通过sentinel dashboard维护限流熔断规则

交互桥梁

在前面的章节中,也提到过。如果在单独的springboot项目中,想要和dashbaord做交互,需要引入如下依赖:

该依赖就是和dashbaord实现数据交互的桥梁,查看该模块的代码包情况:

其中重点需要关注的是: 

com.alibaba.csp.sentinel.transport.command.SimpleHttpCommandCenter 服务端命令接收

com.alibaba.csp.sentinel.transport.heartbeat.SimpleHttpHeartbeatSender 维护心跳

源码分析

应用端

心跳:

        

在 SimpleHttpHeartbeatSender中有看到发送心跳的代码。但是:心跳是需要一直间隔发送的,此处只有发送的逻辑,未见间隔发送逻辑

所以肯定有个地方调用了该sendHeartbeat方法,跟踪代码,发现在:HeartbeatSenderInitFunc中有定时调度该方法:

 再详细的分析调用接口地址和uri

 uri:

 至此,应用client到sentinel dashboard的心跳部分已经分析完成,既:

HeartbeartSenderInitFunc中定时调度HeartbeartSender#sendHeartbeat方法完成心跳功能,dashbaord的ip和端口是由应用启动时:-Dcsp.sentinel.dashboard.server参数指定的(具体的属性逻辑可以自己跟踪一下源码)

应用client端和dashbaord的命令交互

试想一下,在dashbaord上怎么获取到对应接入的应用的限流、熔断配置规则的?

在com.alibaba.csp.sentinel.transport.command.SimpleHttpCommandCenter中可以看到大量的关于网络通信的代码:

 

从代码中可以看到,CommandCentre中启动了一个本地服务器,用于监听连接。同样的,跟踪

com.alibaba.csp.sentinel.transport.command.SimpleHttpCommandCenter#start方法,发现在:

com.alibaba.csp.sentinel.transport.init.CommandCenterInitFunc#init方法完成初始化和调用,同时注意到:在正式调用start之前,做了一些初始化操作

 处理器和请求类型的映射关系:

 

 当接收到来自dashboard的http请求后会组装一个HttpEventTask,交由线程池处理:

最后根据请求类型,分配不同的处理完成处理过程:

以上是命令中心的核心逻辑。总结一下就是:

com.alibaba.csp.sentinel.transport.init.CommandCenterInitFunc#init调用com.alibaba.csp.sentinel.transport.command.SimpleHttpCommandCenter#beforeStart方法完成处理器注解名称和处理器的映射列表,然后启动BIO(依赖不同服务类型不同)的服务器监听

dashboard端

在应用client端有2个待处理的问题:

1 应用client发送的心跳到dashbaord如何处理的

2 client启动的tpc服务器,dashboard是怎么连接并发送请求到应用client端的?

心跳响应

在上面的client段心跳中,有提到过,请求的uri是:/registry/machine,在dashboard的源码中查找到对应的http接口:

接收到心跳信息之后是将数据存储在appManagement中

而AppManagement是MachineDiscovery的一个装饰器,真正干活的是: 

com.alibaba.csp.sentinel.dashboard.discovery.SimpleMachineDiscovery

 到这里心跳的逻辑已经梳理完成:

应用client端通过HeartbeatSenderInitFunc启动定时调度任务调用SimpleHttpHeartbeatSender#sendHeartbeat

方法往dashboard的/registry/machine接口请求,最终数据存储在com.alibaba.csp.sentinel.dashboard.discovery.SimpleMachineDiscovery的一个ConcurrentMap中完成数据统计

dashboard请求client的规则数据

通过跟踪dashboard的页面请求规则接口:/v2/flow/rules&/v1/flow/rules

 最终数据请求委托给了:com.alibaba.csp.sentinel.dashboard.rule.FlowRuleApiProvider

 而FlowRuleApiProvider最终真正获取数据是委托给了SentinelApiClient直连到对应的机器上完成规则内容获取的

一路跟踪最后来到发起http请求的入口:

  到此,dashbaord想应用client端发送命令的过程总结一下:

CommandCenterInitFunc在初始化时,调用SimpleHttpCommandCenter#beforeStart方法完成处理器的初始化,最终组装成一个以处理器的CommandMapping注解的name属性为key,处理器为value的map对象。然后调用SimpleHttpCommandCenter#start()方法启动一个tcp服务器,监听tcp请求。dashbaord在获取规则内容时,通过com.alibaba.csp.sentinel.dashboard.client.SentinelApiClient向应用client端发起http请求(应用client端的ip和端口通过心跳数据获取),完成整个过程

填坑

在第一章关于sentinel的简单使用中,有提到一个问题:为什么应用client端已经添加依赖,添加启动命令,并且启动成功之后,在dashboard的面板上无法看到对应的应用信息:

 而且在做源码分析的时候也留了个坑:

 在上面分析应用client端心跳时有提到:HeartbeatSenderInitFunc#init方法会启动定时调度功能完成心跳注册。而Env的这段静态代码块就是实现该功能的:

这里就是通过SPI机制,读取配置中实现了InitFunc接口的类完成初始化任务。间接的完成HeartbeatSenderInitFunc的处理化,从而往dashboard注册心跳。

而Env要运行静态代码块,是在SphU#entry方法触发的。 当然,如果你在启动应用时初始化一下Env类,肯定也是可以和dashboard完成心跳注册的:

以上:就是sentinel和dashbaord完成交互的全过程。关于sentinel的集群限流和数据持久化的问题,在关于sentinel运用的第五章中会完全解释。

创作不易,点赞、收藏、关注!

相关文章:

sentinel客户端和dashboard交互

回顾 在前面的章节中:通过阐述sentinel简单使用、滑动窗口、核心流程源码分析把sentinel限流、熔断等主要功能说明清楚了,但我们在实际使用的过程中,不可能通过硬编码的方式设置规则,且规则也没法直观的维护,为此肯定…...

vue或uniapp使用pdf.js预览

一、先下载稳定版的pdf.js,可以去官网下载 官网下载地址 或 pdf.js包下载(已配置好,无需修改) 二、下载好的pdf.js文件放在public下静态文件里, uniapp是放在 static下静态文件里 三、使用方式 1. vue项目 注意路径 :src"static/pd…...

virtualBox桥接模式下openEuler镜像修改IP地址、openEule修改IP地址、openEule设置IP地址

安装好openEuler后,设置远程登入前,必不可少的一步,主机与虚拟机之间的通信要解决,下面给出详细步骤: 第一步:检查虚拟机适配器模式:桥接模式 第二步:登入虚拟机修改IP cd /etc/sysconfig/network-scripts vim ifcfg-enpgs3 没有vim的安装或者用vi代替:sudo dnf …...

git unable to get local issuer certificate (_ssl.c:1007)>

原因1:Git无法验证SSL证书 这个错误通常是由于Git无法验证SSL证书导致的。您可以尝试以下方法解决此问题: 确认您的计算机上是否安装了正确的SSL证书。如果没有,请下载并安装它们。您可以使用以下命令在Mac上安装SSL证书: brew…...

QT之时钟

QT之时钟 会用到一个时间类:qtime 定时类:qtimer #------------------------------------------------- # # Project created by QtCreator 2023-08-13T10:49:31 # #-------------------------------------------------QT += core guigreaterThan(QT_MAJOR_VERSION,…...

机器学习基础(四)

KNN算法 KNN:K-Nearest Neighbor,最近领规则分类。 为了判断位置实例的类别,以所有已知类别的实例作为参照选择参数K。计算未知实例与所有已知实例的距离。(一般采用欧氏距离)选择最近K个已知实例。根据少数服从多数的投票法则,让未知实例归类为K个最近邻样本中最多数的类…...

HTML详解连载(5)

HTML详解连载(5) 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽行高:设置多行文本的间距属性名属性值行高的测量方法 行高-垂直居中技巧 字体族属性名属性值示例扩展 font 复合属性使用场景复合属性示例注意 文本缩进属性…...

【CI/CD】基于 Jenkins+Docker+Git 的简单 CI 流程实践(上)

基于 JenkinsDockerGit 的简单 CI 流程实践(上) 在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要。目前已经形成一套标准的流程,最重要的组成部分就是 持续集成 及 持续交付、部署。…...

基于FPGA的PID算法理论详解(1)

基于FPGA的PID算法理论详解(1) 1 概述 比例-积分-微分(PID)控制是业内最常见的控制算法,在工业控制领域有很高的接受度。PID控制器的广泛应用得益于其在多种操作条件下稳定的性能,以及易操作的特性。工程师可以用简单直观的方式实现PID控制。PID控制有三个基本要件:比…...

Neo4j之REMOVE基础

在 Neo4j 中,REMOVE 语句用于从节点中删除特定的属性。这在你需要更新或者清除节点属性时非常有用。 1】删除单个属性: MATCH (p:Person {name: Alice}) REMOVE p.age;这个查询会找到具有 "Person" 标签且属性 "name" 为 "Al…...

SpingBoot-Vue前后端——实现CRUD

目录​​​​​​​ 一、实例需求 ⚽ 二、代码实现 🏌 数据库 👀 后端实现 📫 前端实现 🌱 三、源码下载 👋 一、实例需求 ⚽ 实现一个简单的CRUD,包含前后端交互。 二、代码实现 🏌 数…...

LeetCode150道面试经典题--最后一个单词的长度(简单)

1.题目 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 2.示例 3.思路 通过对字符串的反转,转为数组开始遍历&#xff0c…...

web-xss-dvwa

目录 xss(reflected) low medium high xss(store) low medium high xss(dom) low medium high xss(reflected) low 没有什么过滤,直接用最普通的标签就可以了 http://127.0.0.1/DVWA-master/vulnerabili…...

Exploiting Proximity-Aware Tasks for Embodied Social Navigation 论文阅读

论文信息 题目:Exploiting Proximity-Aware Tasks for Embodied Social Navigation 作者:Enrico Cancelli, Tommaso Campari 来源:arXiv 时间:2023 Abstract 学习如何在封闭且空间受限的室内环境中在人类之间导航&a…...

【华为OD机试】统计射击比赛成绩【2023 B卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数, 请对每个选手按其最高3个分数之和进行降序排名,输出降序排名后的选手ID序列。 条件如下: 1、一个选手可以有多个射击成…...

git push之后的撤销操作

用的是idea。 pull了代码之后,想撤销pull: push代码到个人远程仓库之后,又从主仓pull了一下。 点击其中一条git记录,然后右键单击“reset current branch ti here”,然后再点击hard push了代码到个人仓库,想撤销&…...

CSS 的选择器有哪些种类?分别如何使用?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 元素选择器(Element Selector)⭐ 类选择器(Class Selector)⭐ ID 选择器(ID Selector)⭐ 后代选择器(Descendant Selector)⭐ 子元素选择器&a…...

【MongoDB】索引

目录 一、概述 二、索引的类型 1、单字段索引 2、复合索引 3、其他索引 三、索引的管理 1、索引的创建 2、索引的查看 3、索引的删除 四、索引的使用 1、执行计划 2、涵盖的查询 一、概述 索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须…...

机器人CPP编程基础-02变量Variables

机器人CPP编程基础-01第一个程序Hello World 基础代码都可以借助人工智能工具进行学习。 C #include<iostream>using namespace std;main() {//Declaring an integer type variable A, allocates 4 bytes of memory.int A4;cout<<A <<endl;//Prints the a…...

【学会动态规划】买卖股票的最佳时机 IV(18)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…...

Nginx-UI:现代化Nginx集群管理平台的技术架构与实践指南

Nginx-UI&#xff1a;现代化Nginx集群管理平台的技术架构与实践指南 【免费下载链接】nginx-ui Yet another WebUI for Nginx 项目地址: https://gitcode.com/gh_mirrors/ngi/nginx-ui 项目定位与技术架构 Nginx-UI是一个基于Go和Vue构建的现代化Nginx管理平台&#xf…...

OpenMetrics安全指南:保护你的监控数据免受威胁

OpenMetrics安全指南&#xff1a;保护你的监控数据免受威胁 【免费下载链接】OpenMetrics Evolving the Prometheus exposition format into a standard. 项目地址: https://gitcode.com/gh_mirrors/op/OpenMetrics OpenMetrics作为Prometheus exposition format的标准化…...

药材烘干返潮,注意这些细节

药材烘干返潮&#xff1f;这些细节要注意在中药材加工行业&#xff0c;烘干后药材出现返潮、霉变&#xff0c;是不少从业者都会遇到的痛点问题&#xff0c;不仅影响药材品质与药效&#xff0c;还会造成不必要的经济损失。结合行业实践与设备应用经验&#xff0c;从三个核心维度…...

Java-RPG-Maker-MV-Decrypter:5步轻松解密RPG游戏资源的完整教程

Java-RPG-Maker-MV-Decrypter&#xff1a;5步轻松解密RPG游戏资源的完整教程 【免费下载链接】Java-RPG-Maker-MV-Decrypter You can decrypt whole RPG-Maker MV Directories with this Program, it also has a GUI. 项目地址: https://gitcode.com/gh_mirrors/ja/Java-RPG-…...

AI 时代:祛魅、适应与重新定义肝

指令替换 项目需求&#xff1a;将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一&#xff0c;测试代码示例 test.c // test.c #includ…...

Qwen-Image-Edit-2511-Unblur-Upscale应用场景:证件照、老照片、合影修复全搞定

Qwen-Image-Edit-2511-Unblur-Upscale应用场景&#xff1a;证件照、老照片、合影修复全搞定 1. 引言&#xff1a;图像修复的痛点与解决方案 你是否遇到过这样的困扰&#xff1f;珍贵的家庭老照片已经泛黄模糊&#xff0c;证件照因为拍摄条件限制显得不够清晰&#xff0c;或者…...

Cosmos-Reason1-7B实操手册:视频分段处理与长时序物理状态拼接技术

Cosmos-Reason1-7B实操手册&#xff1a;视频分段处理与长时序物理状态拼接技术 1. 项目概述 Cosmos-Reason1-7B是NVIDIA开源的一款7B参数量的多模态物理推理视觉语言模型(VLM)&#xff0c;作为Cosmos世界基础模型平台的核心组件&#xff0c;专注于物理理解与思维链(CoT)推理能…...

EtchDroid:让安卓手机成为你的随身启动盘制作工具,无需Root权限

EtchDroid&#xff1a;让安卓手机成为你的随身启动盘制作工具&#xff0c;无需Root权限 【免费下载链接】EtchDroid An application to write OS images to USB drives, on Android, no root required. 项目地址: https://gitcode.com/gh_mirrors/et/EtchDroid 你是否曾…...

AtomGit与主流开发框架的无缝集成全指南

生态共生&#xff1a;AtomGit与主流开发框架的无缝集成全指南在前六篇文章中&#xff0c;我们已经深入掌握了AtomGit的Git操作、团队协作、CI/CD流水线、模型托管和算力连接。今天&#xff0c;我们将迈入一个更广阔的视角——AtomGit如何与你日常使用的开发工具、技术框架深度融…...

3分钟快速上手:WorkshopDL终极跨平台Steam创意工坊下载器完全指南

3分钟快速上手&#xff1a;WorkshopDL终极跨平台Steam创意工坊下载器完全指南 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否拥有Epic或GOG平台的游戏&#xff0c;却眼馋…...