1.深度剖析:Dubbo使用Nacos注册中心的坑
2.DubboAdmin管理控制台
3.Github 源码阅读神器推荐
4.一款开源的高性能 Dubbo 网关:dubbo-gateway
5.偷偷跟我学这个看源码的小技巧,早日解放双手
6.阿里巴巴的 26 款超神 Java 开源项目!
深度剖析:Dubbo使用Nacos注册中心的坑
在年的一次微服务组件升级中,我遇到了Dubbo注册中心从Zookeeper切换到Nacos时出现的一些问题,近期在浏览GitHub时,发现有类似问题的脚本精灵王者荣耀源码讨论,于是决定对这些问题进行整理和总结。
首先,问题的描述是这样的:在进行Dubbo注册中心的切换后,微服务启动变得异常缓慢,日志中显示了大量对Nacos的请求,同时JVM中的线程数急剧增加,达到左右。
通过观察这些现象,我们初步判断问题可能出在Nacos上,推测是由于某种原因生成了大量Nacos线程,每个线程不断发送HTTP请求。随后,我们开始从Nacos的原理和实现开始分析。
Nacos客户端在进行注册和订阅服务时,一般会创建四个重要线程,这些线程在Nacos源码中能找到对应的位置和执行任务,即不断地向Nacos服务器发送HTTP API请求。
进一步分析后,我们发现问题出在Dubbo的配置上。Dubbo在初始化代理对象时引入了timestamp参数,而NacosRegistryFactory在创建注册中心缓存键时并没有截掉这个参数,导致缓存无法正常工作,从而不断创建新的线程和HTTP请求。
回顾Dubbo的配置初始化流程,发现关键在于ReferenceConfig类中加入了timestamp参数。在NacosRegistryFactory的实现中,没有正确处理这个参数,最终导致了问题的发生。
解决方法相对简单,即在Dubbo的swagger源码修改NacosRegistryFactory类中截掉timestamp参数。幸运的是,这个修复在2.7.9版本中已经由其他开发者完成,并合并到了代码库中。通过将2.7.9版本的修复类替换到2.7.8版本的NacosRegistryFactory类中,问题得到了解决。
在排查问题时,了解Dubbo和Nacos的基本原理和实现是至关重要的。这要求我们在日常工作中不断积累知识,深入理解系统内部的工作机制,这样才能在遇到问题时迅速定位和解决。
综上所述,本文对Dubbo使用Nacos注册中心时遇到的问题进行了详细的梳理和分析,并分享了问题的排查和解决方法。通过这次经历,我们学会了如何在复杂环境中定位和解决技术难题,同时也提醒我们在日常工作中要持续学习和积累,以应对不断变化的技术挑战。
DubboAdmin管理控制台
Dubbo Admin管理控制台在年初发布,版本为0.1,其结构采取前后端分离设计,前端使用Vue和Vuetify作为JavaScript框架与UI框架,后端采用Spring Boot框架。
下载地址为:github.com/apache/dubbo...
下载后得到ZIP文件,解压以获取项目。
管理控制台为Spring Boot工程,配置文件位于解压目录中的dubbo-admin-develop/dubbo-admin-server/src/main/resources/application.properties,主要配置注册中心、配置中心和元数据中心的地址。
默认端口号为,如需修改,可在配置文件中增加server.port=等配置。
完成配置后,使用Maven命令打包项目。打包完成后,编译文件位于dubbo-admin-develop/dubbo-admin-distribution/target/dubbo-admin-0.2.0-SNAPSHOT.jar。spring相关源码
将编译文件放置到对应目录并启动,若使用默认端口号,可通过终端启动。
访问控制台默认用户名和密码为root。如需修改,可在dubbo-admin-develop/dubbo-admin-server/src/main/resources/application.properties文件中进行修改。
Github 源码阅读神器推荐
一款高效阅读和学习源码的开源项目,source-code-hunter(doocs.github.io/source-code-hunter),为源码阅读爱好者提供便利。
借助source-code-hunter,用户能够系统化阅读各种框架的源码,包括spring全家桶、Mybatis系列、Netty、dubbo等,以及中间件、JDK源码解析。
该项目为初学者和源码学习者提供了学习心得,帮助他们建立学习模式,避免无用阅读,加速学习进程。
对于没有源码阅读经验的用户,建议先阅读学习心得,了解学习方法和思考。在日常学习中,先通过视频了解源码的大致设计和功能点,再结合source-code-hunter阅读源码,同时使用本地调试跟踪实现,提升学习效率。
source-code-hunter涵盖了常见框架的源码解析,为用户提供了丰富的学习资源,帮助用户深入理解源码逻辑,提高编程技能。
一款开源的高性能 Dubbo 网关:dubbo-gateway
<dubbo-gateway是一款高性能的Dubbo网关,它实现了HTTP协议到Dubbo协议的javascrip特效源码转换,但不依赖Dubbo的泛化调用。与Spring Cloud Gateway的整合可以提升系统吞吐量,无需对接口进行大量改造,仅需添加简单的注解如@GateWayDubbo和@PathMapping。泛化调用存在性能损耗(约-%)和参数校验在服务提供者阶段的问题,因为数据在网关阶段无法进行有效性检查。
开源地址可以在github.com/smallbeanten...找到。项目中提供了多种注解,如@FromBody、@FromHeader等,用于配置参数来源。使用步骤包括改造api接口、引入相关jar包、配置网关和路由,以及集成安全功能如Cas认证和session共享。项目支持与Spring Cloud Gateway、Zuul和Spring MVC的整合,并提供了定制化的序列化和响应结果处理。
Nacos配置中心用于常规的Dubbo接入,而整合网关的配置需要特别注明使用Dubbo Gateway功能。关于安全配置,包括XSS防御、参数校验和CSRF防御。对于复杂参数,推荐使用application/json格式。版本推荐尝试1.1.3-beta,由yeyuekuanglang2撰写详细教程。
总的来说,dubbo-gateway是一个易于集成、灵活且具有良好性能的Dubbo网关解决方案。
偷偷跟我学这个看源码的小技巧,早日解放双手
大家好!
在看源码的过程中,查看 Git 提交记录是了解文件演变过程的有效途径。对于如何在 IDEA 中查看这些记录,idm下载源码可能有些同学感到困惑。这篇文章将分享一些实用的小技巧,帮助大家更直观地进行源码学习。
首先,确保你的本地环境配置了 Git。如果还没有安装 Git,强烈建议你先完成安装并熟悉基本操作。
接下来,使用 Git 克隆一个感兴趣的开源项目,例如 Redssion。在 IDEA 中导入项目并查看文件右键菜单,确认是否能找到“Git”选项。如果找不到,可能是 Git 配置问题,进入 IDEA 设置中进行相应的调整。
在 IDEA 的“Version Control”标签页中,你可以看到项目的提交历史。通过这个界面,你可以快速浏览文件的变更情况,了解代码的演变过程。
在日常工作中或撰写文章时,使用 IDEA 的 Git 功能主要关注提交记录,而不是直接在 IDEA 中进行代码提交。这种方式提供了可视化的代码历史,有助于理解代码的变更轨迹。
以 Redssion 为例,通过在 GitHub 的 issues 页面搜索关键词(如“死锁”),可以找到相关的问题讨论和代码修复。关注这些信息能帮助你更快定位问题和学习关键代码变更。
使用 IDEA 的 Git 插件,可以方便地查看特定日期的提交记录。在“Version Control”标签页中,通过过滤功能找到目标日期的提交,这样可以快速定位到关键变更。
通过查看提交记录,你可以了解代码的具体修改内容,这对于深入理解代码实现和调试问题非常有帮助。例如,在 Redssion 中,可以追踪到特定类的修改历史,了解其功能演进。
此外,通过查看项目的首次提交记录,可以了解项目的起源和发展历程。例如,Dubbo 的首次提交记录反映了项目早期的状态和开发团队的辛勤工作。这些历史记录不仅展示了技术演变,也蕴含了项目发展的故事。
总的来说,利用 IDEA 的 Git 功能探索代码历史,不仅可以帮助你更高效地学习和理解源码,还能深入了解项目的开发背景和演进过程。通过这种方式,源码阅读将变得更具趣味性和实用性。
阿里巴巴的 款超神 Java 开源项目!
Spring Cloud Alibaba
致力于提供分布式应用服务开发的一站式解决方案,包含开发分布式应用服务所需的组件。通过 Spring Cloud 编程模型,开发者只需添加注解和少量配置,即可将应用接入阿里分布式应用解决方案,利用阿里中间件快速搭建分布式系统。
地址:github.com/spring-cloud...
Druid
Druid 是一个 JDBC 组件,提供监控数据库访问性能、高效数据库连接池、数据库密码加密和 SQL 执行日志等功能。
地址:github.com/alibaba/drui...
fastjson
fastjson 是一个快速且功能强大的 Java JSON 处理库,由阿里巴巴工程师开发。特点包括快速、支持 Jdk 类、零依赖等。
地址:github.com/alibaba/fast...
Dubbo
Apache Dubbo (incubating) 是一款高性能、轻量级的开源 Java RPC 框架,提供面向接口的远程方法调用、智能容错和负载均衡、服务自动注册和发现等功能。
地址:github.com/alibaba/dubb...
JStorm
JStorm 是基于 Apache Storm 实现的实时流式计算框架,改进了网络 IO、线程模型、资源调度、可用性及稳定性,广泛应用于企业。
地址:github.com/alibaba/jsto...
apns4j
apns4j 是 Apple Push Notification Service 的 Java 实现。
地址:github.com/teaey/apns4j
TDDL
TDDL 是基于集中式配置的 JDBC 数据源实现,支持主备、读写分离、动态数据库配置等功能。
地址:github.com/alibaba/tb_t...
CobarClient
Cobar Client 是基于 iBatis 和 Spring 的轻量级分布式数据访问层。
地址:github.com/alibaba/coba...
TaobaoJVM
TaobaoJVM 是基于 OpenJDK HotSpot VM 的优化、定制且开源的服务器版 Java 虚拟机,已在淘宝、天猫上线。
地址:jvm.taobao.org
SimpleImage
SimpleImage 是阿里巴巴的 Java 处理类库,支持缩略、水印等处理。
地址:github.com/alibaba/simp...
Tedis
Tedis 是另一个 redis 的 Java 客户端,旨在打造高可用 Redis 解决方案。
地址:github.com/justified/te...
Arthas
Arthas(阿尔萨斯)是阿里巴巴开源的 Java 诊断工具,采用命令行交互模式,提供 Tab 自动补全功能,便于问题定位和诊断。
地址:alibaba.github.io/artha...
Nacos
Nacos 致力于帮助开发者实现动态服务发现、服务配置管理、服务及流量管理,构建以服务为中心的现代应用架构。
地址:nacos.io/en-us/
easyexcel
Java 解析、生成 Excel 的轻量级框架,提供模型转换封装,使用简便。
地址:github.com/alibaba/easy...
Sentinel
Sentinel 是面向微服务的轻量级流量控制框架,提供流量控制、熔断降级、系统负载保护等功能。
地址:github.com/alibaba/Sent...
SOFALookout
Lookout 是一个利用多维度 metrics 进行系统度量和监控的项目,支持 metrics 数据收集、加工、存储和查询等。
地址:github.com/alipay/sofa-...
SOFABoot
SOFABoot 是基于 Spring Boot 的研发框架,提供 Readiness Check、类隔离、日志空间隔离等功能,方便使用 SOFAStack 相关中间件。
地址:github.com/alipay/sofa-...
SOFAArk
SOFAArk 是一款轻量级 Java 类隔离容器,提供类隔离和依赖包隔离能力,支持简单的单模块或 Spring Boot 应用。
地址:alipay.github.io/sofast...
SOFATracer
SOFATracer 是用于分布式系统调用跟踪的组件,通过统一的 traceId 记录调用链路,便于故障发现和服务治理。
地址:github.com/alipay/sofa-...
SOFARPC
SOFARPC 是高性能、高可扩展性的 Java RPC 框架,提供方便透明、稳定高效的点对点远程服务调用方案。
地址:github.com/alipay/sofa-...
SOFABolt
SOFABolt 是基于 Netty 实现的网络通信框架,旨在简化基于网络通信的业务逻辑实现。
地址:github.com/alipay/sofa-...
JVM-Sandbox
JVM-Sandbox 是基于 JVM 的非侵入式运行期 AOP 解决方案。
地址:github.com/alibaba/jvm-...
OpenMessaging
OpenMessaging 是由阿里巴巴发起的分布式消息及流处理领域的应用开发标准。
地址:github.com/openmessagin...
Dragonfly
Dragonfly 是阿里自研的 P2P 文件分发系统,用于解决大规模文件分发场景下分发耗时、成功率低等问题。
地址:github.com/alibaba/Drag...
VirtualLayout
VirtualLayout 是针对 RecyclerView 的 LayoutManager 扩展,提供布局方案和组件复用。
地址:github.com/alibaba/vlay...
P3C
P3C 是 Java 代码规约扫描插件,包含 PMD 实现、IntelliJ IDEA 插件和 Eclipse 插件。
地址:github.com/alibaba/p3c
Go语言微服务框架重磅升级:dubbo-go v3.2.0 -alpha 版本预览
随着Dubbo3在微服务领域的快速发展,Dubbo的Go语言实现迎来了自Dubbo3以来最全面、幅度最大的升级,这次升级涉及API、协议、流量管理和可观测能力等多个方面。新版本的dubbo-go亮点显著:全新的Triple协议:dubbo-go支持的Triple协议使得编写浏览器兼容的RPC服务变得轻松,兼容HTTP/1和HTTP/2,能通过".dubbo.apache.org/zh-cn/overview/core-features/traffic/
流量管控商场示例:.dubbo.apache.org/zh-cn/overview/tasks/traffic-management/
作者:王宇轩,Apache Dubbo Committer如何使用JMeter测试Dubbo接口
Dubbo是一个分布式服务框架,专注于提供高性能和透明化的RPC远程服务调用方案以及SOA服务治理方案。Dubbo作为基于Java的开源RPC框架,并非协议,而是一个分布式服务框架。其运行原理基于节点角色和调用关系,实现分布式服务调用。
在准备测试Dubbo接口的环境时,首先需下载JMeter的Dubbo依赖JAR包,根据Dubbo服务版本选择对应的插件版本,例如2.3.7版本对应jmeter-plugins-dubbo-2.7.1-jar-with-dependencies.jar,将此包放置于JMeter安装目录的lib/ext路径下。如需使用jmeter-plugins-dubbo-${ version}.jar版本,需自行添加依赖包。下载链接可参考github.com/thubbo/jmete...。注意,若在下载依赖包之前已启动JMeter,需重启JMeter。然后,可使用JMeter中的取样器元件发送支持Dubbo协议的请求。
Dubbo Sample组件添加至测试计划,操作步骤为选中“线程组”右键添加取样器,选择Dubbo Sample。界面内包含注册设置、RPC协议设置、消费者和提供者设置及接口设置等选项。具体设置包括选择使用的Dubbo协议(如dubbo、rmi、hessian、webservice、memcached、redis),配置消费者和提供者信息以及接口相关信息。
在使用Dubbo Sample组件进行测试时,可采用zookeeper协议请求Dubbo接口。步骤包括调用Dubbo服务,填写Dubbo Sample请求内容并点击Get Provider List按钮获取提供者列表,查看日志以确认获取成功。若列表获取失败,需检查zookeeper地址或服务状态。获取到提供者列表后,选择需要调用的接口和方法。运行脚本后,检查结果以确认成功请求Dubbo接口并接收返回数据。
另外,直连方式请求Dubbo接口也适用于不通过注册中心直接链接特定提供者进行调用。完成编辑后运行脚本,同样能成功请求Dubbo接口并接收返回数据。至此,利用JMeter对Dubbo接口的访问流程结束。