1.dubbo����Դ��
2.干货 | Dubbo 接口测试技术,出源测试开发进阶必备(附源码)
3.dubbo知识点之管理工具dubbo-admin分享
4.dubbo服务管理工具dubbo-admin环境搭建
5.Java教程:dubbo源码解析-网络通信
6.Dubbo源码:跟着Demo学习基本使用
dubbo����Դ��
某天,源码运营反馈称,深度执行一次保存操作后,解析后台出现3条数据,出源我立刻怀疑可能存在代码问题。源码财经期讯源码为了确保不会误判,深度我要求暂停操作,解析保留现场,出源以便我进行排查。源码
查看新增代码,深度发现是解析同事三歪进行的改动,他将原有的出源dubbo XML配置方式改为了注解方式。我询问其改动详情,源码得知他是深度更改了模块的配置方式。于是,我决定深入研究,找出问题所在。
dubbo配置方式多样,最常见的为XML配置与注解配置。我已初步推测原因,接下来将进行详细的调试过程。
我使用dubbo版本2.6.2进行调试。首先,牧场商城源码针对采用@Reference注解条件下的重试次数配置,我发现调用接口时,会跳转到InvokerInvocationHandler的invoke方法。继续跟踪,最终定位到FailoverClusterInvoker的doInvoke方法。在该方法中,我关注到获取配置的retries值,发现其默认值为null,导致最终计算出的重试次数为3。
采用dubbo:reference标签配置重试次数时,同样在获取属性值后,发现其默认值为0,与注解配置一致,最终计算出的重试次数为1。对比两种配置方式,我总结了以下原因:
在@Reference注解形式下,dubbo会在注入代理对象时,通过自定义驱动器ReferenceAnnotationBeanPostProcessor来注入属性。在标签形式下,虽然也使用了Autowired注解,但dubbo会使用自定义名称空间解析器DubboNamespaceHandler进行解析。
在注解形式下,当配置retries为0时,ant 源码分析属性值在注入过程中并未被解析为null,但进入buildReferenceBean时,因nullSafeEquals方法的处理,导致默认值和实际值不一致,最终未保存到map中。而标签形式下,解析器能够正确解析出retries的值为0,避免了后续的问题。
总结发现,采用@Reference注解配置重试次数时,dubbo在注入属性过程中存在逻辑处理上的问题,导致默认值与实际值不一致。此为dubbo的一个逻辑bug。建议在不需要重试时,设置retries为-1,以确保接口的幂等性。需要重试时,设置为1或更大值。
问题解决后,我优化了文件操作,将其改为异步处理,从而缩短了主流程的时间。最终,soem 源码解析数据出现3条的状况得以解决。
此问题已得到解决,并在后续dubbo版本2.7.3中修复,确保了在注解配置方式下,nullSafeEquals方法能够正确处理默认值与实际值一致的情况。
干货 | Dubbo 接口测试技术,测试开发进阶必备(附源码)
Dubbo接口测试是霍格沃兹测试学院的特色课程,全网深度领先。Dubbo是一个由阿里巴巴开源的RPC解决方案,因其理念与微服务高度契合,近年来受到广泛关注,用户包括京东、当当、去哪儿等大公司。 Dubbo支持RPC场景,其架构设计简洁明了。官方提供了一个易于使用的Demo来展示Dubbo协议的使用,操作简单且功能强大。 下面介绍几种常用的Dubbo接口测试方法: 1. 基于telnet的简单调试接口:Dubbo服务支持简单的telnet交互,可用于快速验证接口的可用性。 2. 传统的基于XML配置的测试方法:通过创建XML配置文件,并将其放置在resources目录下,可以进行测试。店铺助手源码 3. 基于API的测试方法:除了XML配置,官方还提供了一种直接通过API进行配置的方式,这种测试方法更加灵活。 4. 泛化调用:在没有API接口或模型类元的情况下,泛化接口调用方式非常有用。这通常用于集成框架,如创建通用服务测试框架,可通过GenericService调用所有服务实现。尽管泛化方法可能需要依赖研发提供的Dubbo接口的jar包,但它也存在一些缺点,如仍然需要jar包或文档来分析接口调用参数信息。 5. 使用泛化方法时,可能只需借助如asm之类的字节码分析框架,即可自动生成接口测试用例模板,减少依赖。 注意以下技术关注点:一线名企大厂内推通道
史上最全软件测试资料文档下载
如何从一个只会点鼠标的手工测试变成测试开发
请关注霍格沃兹测试学院官方机构号:测吧 @测吧 推荐阅读:测试开发是什么?为什么现在那么多公司都要招聘测试开发?
软件测试的岗位会越来越少吗?
软件测试真的干到就干不动了吗?
dubbo知识点之管理工具dubbo-admin分享
在dubbo的应用体系中,一直有一款图形化的rpc管理工具,通过这款管理工具,我们可以对我们的rpc服务进行各种管理操作,包括负载均衡、权重调整、服务监测等,今天我们就先来简单看下这一款管理工具。
dubbo的管理服务,现在也是一个独立的应用,我们可以将它独立部署。项目地址如下:
根据官方介绍,目前的管理控制台已经发布0.1版本,结构上采取了前后端分离的方式,前端使用 Vue和 Vuetify分别作为 Javascript框架和UI框架,后端采用 Spring Boot 框架。既可以按照标准的 Maven 方式进行打包,部署,也可以采用前后端分离的部署方式,方便开发,功能上,目前具备了服务查询,服务治理(包括 Dubbo 2.7中新增的治理规则)以及服务测试三部分内容。
下面,我们看下如何在本地安装部署dubbo的管理控制台。
首先,我们要下载dubbo-admin的源码包或者部署包,如果下载源码包的话,需要你自己打包,由于又是前后端分离的项目,所以这里我就偷个懒,直接下载部署包:
下载完成后,直接解压,然后进入bin\config文件夹,这里有dubbo-admin的配置文件。因为后端是spring boot项目,所以这里的application.properties文件就是我们spring boot的配置文件,默认情况下,整个配置文件只有一些简单配置项:
因为没有项目的端口配置,所以默认情况下,dubbo-admin的访问端口是,当然你也可以自行修改;
配置文件中,首先是注册中心、配置中心、元数据中心的配置,今天我们演示的注册中心是zk,所以这里就不修改了;
紧接着是管理平台的登录用户名和密码,默认都是root,你也可以根据自己的需要修改;
最后面是压缩的相关配置,这里应该是请求响应内容的压缩配置,主要是针对css/js以及页面等内容。
完成以上内容配置,我们就可以启动测序下了。首先,我们要先启动zk,然后启动我们的管理平台,直接访问我们dubbo-admin的服务地址即可,我配置的端口是,所以我访问的地址是pm源并重新安装。对于启动时的InetSocketAddress错误,可能需要降级到Java 8版本来解决。
Java教程:dubbo源码解析-网络通信
在之前的内容中,我们探讨了消费者端服务发现与提供者端服务暴露的相关内容,同时了解到消费者端通过内置的负载均衡算法获取合适的调用invoker进行远程调用。接下来,我们聚焦于远程调用过程,即网络通信的细节。
网络通信位于Remoting模块中,支持多种通信协议,包括但不限于:dubbo协议、rmi协议、hessian协议、/post/
Dubbo源码解析:网络通信
<dubbo源码解析:深入理解网络通信
在之前的章节中,我们已经了解了消费者如何通过服务发现和负载均衡机制找到提供者并进行远程调用。本章将重点解析网络通信的实现细节。
网络通信主要在Dubbo的Remoting模块中进行,涉及多种通信协议,包括dubbo协议、RMI、Hessian、HTTP、WebService、Thrift、REST、gRPC、Memcached和Redis等。每个协议都有其特定的优缺点,如Dubbo协议适用于高并发场景,而RMI则使用标准JDK序列化。
Dubbo的序列化机制支持多种方式,如Hessian2、Kryo、FST等。近年来,高效序列化技术如Kryo和FST的出现,可提升性能,只需在配置中简单添加即可优化。
关于数据格式和粘包拆包问题,Dubbo采用私有RPC协议,消息头存储元信息,如魔法数和数据类型,消息体则包含调用信息。消费者发送请求时,会通过MockClusterInvoker封装服务降级逻辑,然后通过序列化转换为网络可传输的数据格式。
服务提供方接收请求时,首先对数据包进行解码,确认其格式正确性,然后调用服务逻辑。提供方返回调用结果时,同样经过序列化和编码,最后通过NettyChannel发送给消费者。
在心跳检测方面,Dubbo采用双向心跳机制,客户端和服务端定期发送心跳请求以维持连接。此外,还通过定时任务处理重连和断连,确保连接的稳定性和可靠性。
总的来说,Dubbo的网络通信模块精细且灵活,通过多种协议和优化技术确保服务调用的高效和可靠性。