Alibaba Sentinel对接Spring Cloud Gateway关于不显示API管理及请求链路的坑附带解决方案

sentinel 启动配置项 阅读详情

在调试Sentinel对接Scg网关的时候,出现了一个比较坑的现象,就是网关菜单,不显示请求链路和API管理的菜单项,这个问题主要是由于,Sentinel的dashboard前端sidebar.js的 代码逻辑中,       /registry/machine查询返回的数据,返回的appType = 0

AppService.getApps().success(
          function (data) {
            if (data.code === 0) {
              let path = $location.path().split('/');
              let initHashApp = path[path.length - 1];
              $scope.apps = data.data;
              $scope.apps = $scope.apps.map(function (item) {
                if (item.app === initHashApp) {
                  item.active = true;
                }
                let healthyCount = 0;
                for (let i in item.machines) {
                  if (item.machines[i].healthy) {
                      healthyCount++;
                  }
                }
                item.healthyCount = healthyCount;
                // 对应后端接口 /registry/machine查询数据,返回的appType = 0
                item.isGateway = item.appType === 1 || item.appType === 11 || item.appType === 12;

                if (item.shown) {
                  return item;
                }
              });
            }
          }
        );

通过后端MachineRegistryController的receiveHeartBeat方法返回的数据 item的appType为0,这就使得菜单一直显示普通的服务类型的菜单,而不显示网关类型的菜单。

receiveHeartBeat方法实际是由连接dashboard的各个客户端发送心跳数据,传入的参数中含有appType, 而透过客户端的代码可以看到以,使用http方式传输为例,可以看一下客户端SimpleHttpHeartbeatSender的源码,这里的sendHeartbeat方法,就是对应dashboard的receiveHeartBeat来进行信息交互的,通过调试可以看出发送的心跳数据HeartbeatMessage中,appType就为0而不是为1,HeartbeatMessage类中app_type的值是来源于SentinelConfig.getAppType() 

public HeartbeatMessage() {
        message.put("hostname", HostNameUtil.getHostName());
        message.put("ip", TransportConfig.getHeartbeatClientIp());
        message.put("app", AppNameUtil.getAppName());
        // Put application type (since 1.6.0).
        message.put("app_type", String.valueOf(SentinelConfig.getAppType()));
        message.put("port", String.valueOf(TransportConfig.getPort()));
    }

而SentinelConfig中 appType的默认值APP_TYPE_COMMON = 0,由于SentinelSCGAutoConfiguration自动配置的时候,init初始化方法未能在发送心跳前将appType的值进行变更,所以导致都是按默认值0来传递数据的,也就是说,SimpleHttpHeartbeatSender中的HeartbeatMessage在初始化的时候SentinelSCGAutoConfiguration里的initAppType方法还未未执行,SentinelSCGAutoConfiguration是在SimpleHttpHeartbeatSender读取csp.sentinel.app.type之后执行的,所以SentinelSCGAutoConfiguration这里的自动配置csp.sentinel.app.type是无效的,这就使得dashboard一直按普通服务展示菜单。所以只能通过,SentinelConfigLoader 会从System.getProperty加载变量信息,并最终由SentinelConfig的loadProps方法加载到props的内存Map中,解决办法是可以在服务的启动命令中加上 -Dcsp.sentinel.app.type=1 或者 在服务的Application的main方法里加入System.setProperty("csp.sentinel.app.type", "1"); 这样就可以使得机器的appType变为1

@SpringBootApplication
@EnableDiscoveryClient
public class Application {
    public static void main(String[] args) {
        System.setProperty("csp.sentinel.app.type", "1");
        SpringApplication.run(Application.class, args);
    }
}

这样调整之后只是改变了一半的问题,你会发现即便改变完成,dashboard刷新后,菜单仍然不会刷新变为网关类型,这是什么原因呢,调试代码发现,虽然客户端心跳发送的machineInfo已经变更appType,但是dashboard查询数据AppInfo里中的apptype依旧为0,

public class AppInfo {

    private String app = "";

    private Integer appType = 0;

    private Set<MachineInfo> machines = ConcurrentHashMap.newKeySet();  这里的appType已经变为1了

    public AppInfo() {}

这又是什么原因呢?经过调试,最后发现,问题就出现在了,SimpleMachineDiscovery里的addMachine方法上了

@Component
public class SimpleMachineDiscovery implements MachineDiscovery {

    private final ConcurrentMap<String, AppInfo> apps = new ConcurrentHashMap<>();

    @Override
    public long addMachine(MachineInfo machineInfo) {
        AssertUtil.notNull(machineInfo, "machineInfo cannot be null");
        AppInfo appInfo = apps.computeIfAbsent(machineInfo.getApp(), o -> new AppInfo(machineInfo.getApp(), machineInfo.getAppType()));
// 只有当apps里对象不存在的时候,才会放一个新的进去,才会发生变化
        appInfo.addMachine(machineInfo);
        return 1;
    }

这是因为,apps里存储了所有服务的服务信息,开始提到的,item.isGateway = item.appType === 1 || item.appType === 11 || item.appType 这个item对象实际对应的是appInfo对象,而appInfo对象里的appType值,是在第一次apps里对象不存在的时候,才会放一个新的进去,才会发生变化。所以当你不重启dashboard的时候,apps里的服务列表中单个对象中的appType是不会变化的,即便是你网关服务已经变更appTpye=1并发送心跳过来。所以直到你重启dashboard ,apps重新装载数据的时候,apps里的服务列表中单个对象中的appType才会重新取到客户端修改后的值并存进去。

AppInfo appInfo = apps.computeIfAbsent(machineInfo.getApp(), o -> new AppInfo(machineInfo.getApp(), machineInfo.getAppType()));

machineInfo.getAppType()变为1了
apps的中AppInfo的appType才会被machineInfo.getAppType值覆盖掉

这个时候页面中的菜单才会变为

Sentinel网关流控页面显示不出来-排查 今天准备集成Sentinel+Gateway,做网关流控,引入了以下这么maven依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <de 阅读详情

相关推荐

Spring Cloud Gateway 502错误全链路排查与性能优化实战

在微服务架构中,API网关作为统一的流量入口,其稳定性和性能至关重要。Spring Cloud Gateway基于响应式编程模型,通过路由、过滤和负载均衡等核心机制,实现了高效的请求转发。理解其底层原理,特别是与连接池、超时控制及熔断降级的协同工作方式,是保障网关高可用的技术关键。当出现“502 Bad Gateway”这类棘手错误时,往往需要系统性地排查网络连通性、下游服务健康度及网关自身配置。本文结合微服务架构下的典型应用场景,深入剖析了从环境搭建、路由配置陷阱,到与Spring Cloud Aliba

weixin_34268753的博客 334

Sentinel网关流控页面异常排查:从心跳机制到AppType的奥秘

本文深入剖析了Sentinel控制台网关流控页面不显示的经典问题。核心原因在于客户端心跳包中的AppType字段传递错误,其值在Spring容器初始化前就已由系统属性`csp.sentinel.app.type`确定。文章揭示了Spring Boot启动顺序与Sentinel SPI加载机制的时序冲突,并提供了通过JVM启动参数或在主类静态代码块中设置属性的两种有效解决方案,帮助开发者彻底解决这一排查难题。

weixin_29292535的博客 191

Spring Cloud Alibaba 2023.x全链路追踪实战指南

全链路日志追踪是分布式系统可观测性的核心能力,其本质是通过上下文传播(Context Propagation)与标准化语义建模,在跨服务、跨线程、跨组件调用中维持TraceID的连续性。OpenTelemetry作为新一代开放标准,取代了Sleuth等厂商绑定方案,提供统一的数据模型与可插拔导出机制;而Instrumentation则通过字节码增强实现精准埋点,避免性能损耗。技术价值在于将混沌的分布式调用转化为可定位、可分析、可告警的因果链路,支撑故障诊断、性能优化与业务决策。本文聚焦Spring Clou

weixin_33725239的博客 316

【问题解决】Sentinel整合Gateway控制台不显示API管理

问题场景 在Spring Cloud Gateway整合Sentinel时,发现API管理这个菜单没有显示。 在官方文档里,是有这个菜单的: 原因分析 1. 查看源码页面 在控制台对应的页面sidebar.html中,我们发现这个菜单时通过entry.isGateway这个条件语句来判断的,那么肯定是因为这个判断了不是网关,所以才不显示。 然后在sidebar.js中,发现在查询客户端注册的信息时,appType为0,而只有当appType为1、11、12时,这里才会认为是网关。 2. 查看客户端源码

记录知识、锤炼自我 4406

Spring Cloud Alibaba微服务重构实战:从单体到微服务的渐进式演进

微服务架构是一种将单一应用程序拆分为一组小型、独立服务的软件架构风格,其核心原理是通过服务解耦实现独立部署、扩展和技术异构。这种架构的技术价值在于提升系统弹性、故障隔离能力和团队交付效率,尤其适用于应对高并发、快速迭代的业务场景。在工程实践中,面对单体应用的技术债务和性能瓶颈,采用渐进式重构策略是关键。通过领域驱动设计(DDD)划分服务边界,结合Spring Cloud Alibaba生态(如Nacos、Sentinel),可以在项目中期平滑完成架构升级。本文以Spring Boot单体应用重构为例,详细演

weixin_34068198的博客 370

Spring Cloud Alibaba 源码深度解析:Nacos 服务发现与 Sentinel 流控实现原理

在微服务架构中,服务治理是保障系统稳定性的核心,主要解决服务如何被找到以及如何被保护两大问题。服务发现通过注册中心实现服务的自动注册与发现,其底层通常采用心跳机制和长轮询推送来保证数据的最终一致性。流量控制则是通过实时统计请求指标并应用规则来防止系统过载,其中滑动时间窗口算法能有效平滑流量,解决临界突变问题。这些技术为构建高可用的分布式系统提供了基础保障。本文聚焦于 Spring Cloud Alibaba 生态下的两个关键组件:Nacos 实现了高效的服务注册与发现,其客户端通过周期性心跳维持实例健康,并

weixin_30425949的博客 497

1.5 配置说明

目录 Pt1 启动项配置 Pt1.1 sentinel-core配置项 基础配置项 日志相关配置项 Pt1.2 sentinel-transport-common配置项 Pt2 日志配置 Pt2.1 拦截详情日志 Pt2.2 秒级监控日志 Pt2.3 业务日志 Pt2.4 集群限流日志 Pt1 启动项配置 Pt1.1 sentinel-core配置项 基础配置项 名称 含义 类型 默认值 是否必需 备注 project.name 指定应用的

Java是世界上最好的语言 1058

Spring Cloud Alibaba 之 Sentinel

Sentinel 是由阿里巴巴中间件团队开发的开源项目,是一种面向分布式微服务架构的轻量级高可用流量控制组件。 Sentinel 主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度帮助用户保护服务的稳定性。

Java 技术专栏,从入门到精通,熟悉企业级开发 8660

客户端请求在 Spring Cloud Alibaba 框架中,包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述

这个调用链路详细描述了一个客户端请求在 Spring Cloud Alibaba 框架中如何经过 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的全过程。每个组件在不同的阶段发挥作用,确保请求的高效处理、服务的稳定性和数据的一致性。

qq_36400213的博客 2022

Spring Cloud Alibaba 微服务开发实践

Spring Cloud Alibaba 是阿里巴巴开源的基于 Spring Cloud 的微服务框架。该项目从最初孵化到现在已经历经十多年的发展,得到了广泛的应用。其中主要集成了阿里巴巴中间件生态中的组件,比如 Nacos、Sentinel、RocketMQ 和 Dubbo。这些组件在 Spring Cloud 中进行了整合,让 Spring Cloud 用户能够更加简单方便地使用这些组件。因此,Spring Cloud Alibaba 如今已成为众多 Java 开发者的最爱。

AI天才研究院 2277

ZYNQ千兆网UDP通信实战:从Vivado配置到LWIP优化全流程(附避坑指南)

本文详细介绍了在ZYNQ平台上实现千兆以太网UDP通信的全流程,包括Vivado硬件配置、LWIP协议栈优化及实战代码示例。通过关键参数调整和性能优化,系统吞吐量可提升至850Mbps以上,适用于高速网络通信场景。

weixin_29161785的博客 230

一文详细说明spring cloud和Spring Cloud Alibaba的各自组件以及联系和区别

我们通过对springboot的使用,就知道,spring从来不是重复造轮子,而是对现有技术的封装和维护,举个简单例子,比如最早spring只提供了IOC和AOP的核心功能,而像ORM框架、缓存、MVC框架,spring只是提供了一种兼容以及支持,所以当时大家说spring是万能胶,可以把各种各样的框架整合进来。同理,springcloud也不是自己开发组件,他也不是一个框架,因为Spring Cloud的核心并没有实现服务注册、熔断、配置中心等功能,它提供了一个标准规范。

苍煜 2万+

【iOS开发】dyld: Symbol not found: ___chkstk_darwin 问题解决

【iOS开发】dyld: Symbol not found: ___chkstk_darwin 问题解决 Xcode 13.2.1 运行到iOS12.x版本上崩溃报错如下:dyld: Symbol not found: ___chkstk_darwin dyld: Symbol not found: ___chkstk_darwin Referenced from: /private/var/containers/Bundle/Application/A424CEFD-51DB-450E-9D62-B8

wm9028的专栏 6563

Spring Cloud & SpringCloud Alibaba(一套标准化的微服务解决方案)

本文介绍了Spring Cloud微服务架构的基本概念、系统架构演变过程以及核心组件。主要内容包括:Spring Cloud作为微服务落地方案的优势,支持分布式系统开发,提供服务发现、负载均衡等功能;Spring Cloud Alibaba作为补充方案,具备高性能、高可用特性;微服务基础环境搭建步骤,创建父工程聚合管理多个微服务模块。文章通过架构图对比了单体架构、动静分离架构、分布式架构和微服务架构的差异,并提供了Spring Cloud与Spring Boot版本对应关系参考。

m0_48853274的博客 844

手把手教你搭建一个属于自己的网站-适合零基础小白,文末附网站模板

手把手教你搭建一个属于自己的网站-适合零基础小白写在前面搭建需求功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 写在前面 前段时间休息想着搭一个属于自己的网站,几经尝试终于成功了,网上其实有很多教程,但很多,希望这篇文章能够帮助到

qq_46788925的博客 1万+

FreeRTOS-Plus-CLI使用笔记

FreeRTOS-Plus-CLI使用笔记 一、简介 详细介绍可参考FreeRTOS-Plus-CLI官网地址入口 FreeRTOS+CLI(Command Line Interface, 命令行接口)提供了一种简单、小型、可扩展且RAM高效的方法,使FreeRTOS应用程序能够处理命令行输入。添加一条指令的步骤如下: 提供一个实现命令功能的函数 将命令映射到该功能函数 注册命令 运行命令解释器 命令行调试接口对于排查分析出现的问题提供了很好的接口,可以通过查看传感器信息判断传感器是否正常,可以查看内置

ApexYuan 6964

Spring Cloud Alibaba微服务实战:Nacos+Gateway+Sentinel+Seata+RocketMQ完整搭建指南

微服务架构作为分布式系统设计的核心模式,通过将单一应用拆分为多个小型服务来实现松耦合和高可扩展性。其基本原理是将业务功能模块化,每个服务独立部署和扩展,通过轻量级通信机制协同工作。这种架构的技术价值在于提升开发效率、增强系统容错能力,并支持技术栈的多样性。在实际应用场景中,微服务广泛应用于电商平台、金融系统等需要快速迭代和高并发处理的领域。Spring Cloud Alibaba作为微服务治理的重要解决方案,整合了Nacos服务发现、Sentinel流量控制等核心组件,有效解决了分布式环境下的配置管理和服务

weixin_34268843的博客 538

Changer: Feature Interaction Is What You Need forChange Detection

还有“交换“交互是一种完全不需要参数和计算的操作,它是通过交换空间或通道维度上的双时态特征映射来实现的,交换的特征在经过后续的卷积或令牌混合时进行混合。方法二:提出了两种简单的交互策略,AD和特征“交换”,大量的实验表明,它们可以极大地提高MetaChanger的性能,特别是特征“交换”,即使嵌入到复杂的网络中或应用于具有挑战性的数据集。在这里,我们用虚线勾勒本文的重点。这是变化检测任务的基本问题,双时相图像提供了同一地区在不同时间点的图像数据,通过对比这两个时间点的图像,我们可以检测出该地区的变化。

yokon的博客 1622

Jasna 命令行实战:3 个任务跑通视频批量修复,附全参数速查手册

想让整夜跑完的批量修复一次成功,却记不住哪个参数管显存、哪个管画质?Jasna 的命令行和图形界面能力一致:一条命令能修复单个视频,也能扫完整个文件夹并自动排队。下面带你跑通 3 个任务,再把全部参数按"你什么时候会用到"分组,做成一份随时可以翻的速查手册。 ## 环境自检:确认你的机器能跑 跑任何任务前,用这 5 条检查项确认"能不能跑",避免第一次任务就卡在报错上: 1. `jasna

gitblog_00434的博客 242

如何使用C#自带的GDI+双缓冲类BufferedGraphics实现双缓冲功能

小白摸索着编写一个上位机界面,将遇到的问题及解决方法记录下,以供后来的小白使用哈。这篇文章解决的问题是在绘图时候的闪烁问题。其中网上有些介绍的设置控制方式controlstyle的方法,这个方法我的理解是比较适合于在一个完整的窗口当中绘图。如果要在一个窗口当中的内部容器或者控件内画图的话就不太适合,通常按照前述的方法设置后没有任何效果。对于在窗口内部的绘图的来说,比较有效的方法是在内存当中开辟一块

z20110411的博客 4794

海康工业相机硬件触发与YOLOv5实时检测的工业自动化实践

本文详细介绍了如何将海康工业相机的硬件触发模式与YOLOv5目标检测模型相结合,构建一套高实时性的工业自动化质检系统。文章从产线痛点出发,深入解析了硬件接线、SDK回调取图的实战技巧(包括规避常见Bug),并展示了如何将YOLOv5封装为服务,最终通过Flask API串联业务逻辑,实现从精准触发到实时AI判断的完整落地流程。

k6l7m8n9的博客 492

Spring Cloud Alibaba、Spring Boot、Spring Cloud 版本对应关系全解析

在微服务架构中,依赖版本管理是确保系统稳定运行的基础。Spring Cloud Alibaba、Spring Boot 和 Spring Cloud 三者版本对应关系复杂,涉及不同的命名规则和演进逻辑。理解这些版本线的兼容性原理,能有效避免因版本错配导致的运行时错误,提升工程实践的效率。典型应用场景包括新项目搭建、版本升级迁移以及多模块项目的统一管理。通过 BOM 管理版本、遵循选型决策树,可以显著降低维护成本。本文深入拆解版本对应关系,提供实用指南。

weixin_33762130的博客 722

【GEOS-Chem模拟教程第二期上】生物质燃烧排放 GFED4 数据配置

生物质燃烧排放 GFED4 数据配置

WW、forever的博客 1301

包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述:

包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述:

qq_36400213的博客 1384

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

原神自动化助手完整指南:委托、秘境、采集三套日常流程跑通

原神自动化助手(genshin_impact_assistant)是一个基于图像识别与模拟按键的开源项目,把日常委托、秘境挑战、材料采集这类每天重复的固定流程交给脚本执行,玩家只需要负责选角与养成。它适合已熟悉游戏操作、希望压缩重复劳动时间的普通玩家,也适合想研究视觉定位与流程编排的开发者。 ## 环境要求与首次跑通 使用前准备三样东西:Windows 10/11 系统(依赖 pywin32

gitblog_02742的博客 689

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Spring Cloud Alibaba 最佳实践:基于 Spring Boot 4.0 的完整微服务示例项目

使用 BOM 统一管理版本,避免冲突:</</</</</</</</</</</</</</它不是简单的"Hello World",而是真正考虑了生产环境的复杂性。从链路追踪到限流熔断,从响应式编程到消息驱动,每一个模块都经过精心设计,每一行配置都有实际意义。🎯 学习 Spring Cloud Alibaba🚀 准备升级 Spring Boot 4.0🏗️ 设计微服务架构🔍 寻找生产级参考示例那么这个项目绝对值得你 Star ⭐ 和深入研究!立即体验。

武汉红喜 347

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 关于微信小程序使用Three.js开发AR应用几何图形贴图真机不显示的问题
下一篇: 关于Alibaba Sentinel dashboard对数据进行持久化保存到数据源中,热点规则及授权规则和单机模式无法兼容的问题的解决方案
幕紫
博客等级 码龄16年 56粉丝 32原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值