问题背景
Spring Cloud Alibaba 集成 sentinel ,sentinel代码写的限流降级的功能都是好的,但是sentinel控制台不能检测到服务,在程序启动时配置JVM启动参数(-Dcsp.sentinel.dashboard.server=localhost:18080 -Dproject.name=name-sentinel)就能看到服务。
解决过程
最近一周都被sentinel整崩溃了,耗费的时间太久了,一点进展都没有,考虑到时间成本都打算放弃。在网上找了好久,也没看到一个可以合理的解决方式,都是文不对题。
一开始我看说是最新的JDK8才能用,我想这一个组件就不支持高版本的JDK,万一以后用的组件也是因为JDK版本过高,再升级JDK可能更不好处理,涉及的东西更多,索性我就换成JDK8吧,比较JDK8还是当下的主流环境,等业界彻底抛弃JDK8的时候,我再换也不迟。我把环境从最新的JDK19换成了JDK8,整个环境从JDK11换到JDK19用了1-2天,从JDK19换到JDK8又用了1-2天,接近一个星期的功夫,才把JDK环境搞好。
然而悲催的是,我把JDK切到JDK8,sentinel整合gateway是好用的,但是项目整合sentinel,sentinel控制台还是不显示项目。我对sentinel也不太了解,找问题,真的无从下手。项目的sentinel限流、降级功能都是好的,唯独就是与sentinel控制台关联不起来。官网、使用文档我都看了,也没看到解决方式。把百度上能百度的几乎都百度了一遍,仍然一无所获。
我在考虑要不下载一下sentinel源码,看看到底是哪里出了问题,查查哪里有bug,结果我找了半天,也没看到有git下载地址。哎……
我看网上好用的sentinel版本都是1.8.5或者1.8.0,我就猜想是不是版本不对,新版本导致的问题,所以我就把项目环境的版本换成了1.8.5的sentinel和对应的spring cloud 、spring cloud alibaba、spring boot,试了一下还是不行。我又换成了1.8.0的版本,这下终于好了。终于老天爷再次垂青了我,在我要彻底放弃的时候又给了我希望,感恩!虽然版本降低了,但是整个功能都可以正常用了,总比用不了要强很多。
spring cloud版本对应关系说明
官网版本地址:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
github有时候打不开或者访问速度慢,我就直接截图,标红的是sentinel1.8.0对应的好用的版本。
sentinel坑
Sentinel/sentinel-dashboard at master · alibaba/Sentinel · GitHub
sentinel阿里没有彻底开源,真正的核心功能还是收费的,或者要自己研究源码进行扩展,官网也说的很明确了,Sentinel/sentinel-dashboard at master · alibaba/Sentinel · GitHub
花费了这么长时间搞sentinel,突然心凉了半截,生产环境不保证可靠和安全,那就是只能自己本地测试用吧。在查找问题的过程中,就感受了sentinel的应用范围并不广,就这么一个问题,竟然网上都搜不到解决方案,社区氛围非常有限,官网集成文档也没有明确标明各个版本的差异。
既然开始研究了就踏踏实实下功夫搞明白,接下今年给自己一个明确的目标,把sentinel原理彻底搞明白,最好把源码看一看,尤其是项目与sentinel控制台是怎么通信的,为啥sentinel1.8.6的代码环境就不好用呢?我怀疑高版本的通信方式变更了。把sentinel研究透彻了,可能就是自己以后技术的最大优势。不至于像现在,只要花点时间,虽然没有什么可以难倒的需求或者技术,但是也没有跟外人侃侃而谈的资本,没有明显区别于他人的优势。sentinel要完成的限流、降级、熔断是互联网人应该会的技能,而不应该仅仅停留在理论与使用层面。搞技术还是得有踏踏实实的死磕精神。