前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【坑】dubbo+zookeeper服务端重复调用三次

【坑】dubbo+zookeeper服务端重复调用三次

作者头像
林老师带你学编程
发布2019-05-26 00:01:06
1.7K0
发布2019-05-26 00:01:06
举报
文章被收录于专栏:强仔仔

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1434218

今天遇到一个神坑,坑了足足有半天的时间,一直在这个坑里面爬不出来,当然有很大一部分原因是因为我经验不足引起的,今天和大家一起分分享一下这个神坑。

坑的场景:

项目采用dubbo+zookeeper实现分布式RPC调用。客户端和服务端都是springboot项目,客户端通过RPC远程调用服务端,但是意外的出现了Tried 3 times of the providers的错误,发现服务端对应的接口被重复调用了三次,而且服务端没有报任何错误,客户端反而出现如下所示的错误:

提出问题可能的原因:

所以就特别纳闷,然后就开始寻找问题的原因,问题的原因刚开始想到一下四点:

1.客户端接口和服务端接口的实现类没有一一对应

2.客户端请求服务端超时,导致请求重试

3.传输的参数过大,导致服务端返回给客户端的时候出现问题(因为我看客户端返回的堆内存溢出)

4.返回的数据,没有进行序列化,导致结果返回不了给客户端

问题解决过程:

然后我就根据总结的这几点原因,一一去寻找是不是这些原因引起这个问题的。

首先检测一客户端的接口和服务端的接口实现类是不是一致的,发现是一致的,所以排除第一个原因。

根据第二点原因,我就将客户端的请求时间和超时重试次数做了相应的修改,如下图所示:

最后发现这个问题还是没解决,说明也不是这个原因引起的。

对于第三点,我就将返回的参数大小设置一个大值,设置的值如下所示:

结果发现还是没有任何软用,照样堆溢出,简直坑的一批。

最后只能期望与最后一点了,结果还是令人失望,实体类是有做序列化的,所以也不是这个问题。

峰回路转:

这样最后一个线索也全断了,在快要放弃的时候,突然看到一堆JSONArray和JSONObject错误,想着会不会是json的问题,最后发现还真实json的问题,大家看看我引用的json就知道了。

<dependency>

代码语言:txt
复制
        **<groupId>net.sf.json-lib</groupId>**
代码语言:txt
复制
        **<artifactId>json-lib</artifactId>**
代码语言:txt
复制
        **<version>2.4</version>**
代码语言:txt
复制
        **<classifier>jdk15</classifier>** 

</dependency>

json-lib的依赖中多了 <classifier>jdk15</classifier> 和jdk1.8冲突,导致堆溢出的。最后我机智的将json-lib改为fastjson依赖就成功的解决这个问题了。

坑的总结:

总结一点就是,看问题不要只看表面原因,可能是其它原因引起的,就像这个json冲突,导致堆溢出。它表现出来的状态就是服务端连续请求三次,导致我一直以为是dubbo的问题,没有往json这方面思考,然后一直贻误战机。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年07月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档