bug宝典Node篇 Fail to decode request due to: RpcInvocation
来源:互联网 发布:淘宝开学爆到 编辑:程序博客网 时间:2024/06/05 09:23
下面的应该是一个经典的问题,csdn上可以找到java版本的解决方案,可以如果使用nodejs来调用出现这个问题,该如何解决呢?
java出现这个问题解决方案1
Fail to decode request due to: RpcInvocation [methodName=getLoginQrcode, parameterTypes=null, arguments=null, attachments={path=com.test.wcn.api.service.WcnService, input=220, dubbo=2.8.4, version=1.0.1}
跟踪源码进行调试,com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler
中跟踪到断点,发现req.isBroken()
为true的时候,就会抛出异常
那么接下来要排查的就是造成req.isBroken()
为true的原因。继续查看报文
Request [id=0, version=2.0.0, twoway=true, event=false, broken=true, data=RpcInvocation [methodName=getLoginQrcode, parameterTypes=null, arguments=null, attachments={path=com.test.wcn.api.service.WcnService, input=220, dubbo=2.8.4, version=1.0.1}]]
于是我写一个java的dubbo测试用例,调用后,发现报文如下
Request [id=0, version=2.0.0, twoway=true, event=false, broken=false, data=RpcInvocation [methodName=getLoginQrcode, parameterTypes=[class java.lang.String], arguments=[1300000067], attachments={path=com.test.wcn.api.service.WcnService, input=230, dubbo=2.8.4, interface=com.test.wcn.api.service.WcnService, version=1.0.0, timeout=10000}]]
这么看来问题基本可以定位到,我使用的node-zookeeper-dubbo与当当的dubbox存在兼容问题,解决的办法应该是调整node-zookeeper-dubbo的源码
继续跟踪dubbox的源码 com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec
中decode方法,审查后,这是一条正确的dubbo报文,报文头正常
进入com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec
中decodeBody方法,对报文体进行解码。dubbo协议说明
调试进入到com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation
中DecodeableRpcInvocation方法,这个时候broken还是false。
继续往下走,调试到com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation
中decode方法,终于找到异常信息,而且在这个地方,将broken设置为true了。
com.alibaba.com.caucho.hessian.io.HessianProtocolException: expected integer at 0x12 java.lang.String (Ljava/lang/String;)
再往下定位,进入com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation
中decode方法,问题在于下面红色方框获取参数数量的地方错误了。
接着回到node-zookeeper-dubbo
中index.js,添加下面的代码,写入参数个数
再次调试,出现新的问题
Fail to decode request due to: RpcInvocation [methodName=getLoginQrcode, parameterTypes=[class java.lang.String], arguments=null, attachments={path=com.test.wcn.api.service.WcnService, input=221, dubbo=2.8.4, version=1.0.0}
修改dubbox源码跟踪获取异常如下,以前这个异常信息被吞掉了。
从上面的异常可以看出,dubbox解析报文,要跟报文拼装顺序一致,否则就会出现异常,那么只需要对node-zookeeper-node稍作调整,将attachments的参数构建放在args构建前面就可以了。
但当我参数不只一个的时候,又有问题了。按照下图更改后,问题彻底解决。
- bug宝典Node篇 Fail to decode request due to: RpcInvocation
- Fail to decode request due to: RpcInvocation
- Fail to decode request due to: RpcInvocation
- Dubbo-Fail to decode request due to: RpcInvocation
- Dubbo-Fail to decode request due to: RpcInvocation
- 简记:com.alibaba.dubbo.remoting.RemotingException: Fail to decode request due to: RpcInvocation
- 简记:com.alibaba.dubbo.remoting.RemotingException: Fail to decode request due to: RpcInvocation
- eclipse cvs upate fail due to conflict
- Node Eviction due to OLOGGERD High CPU
- Statement cancelled due to timeout or client request
- 【Android开发bug】Dropping event due to no window focus
- bug宝典PYTHON篇 UnicodeDecodeError: ‘gbk’ codec can’t decode
- Learn to fail or fail to learn.
- sql连接远程服务器:unable to add data connection fail to retrieve data for this request
- 连接WCF出现错误:The server was unable to process the request due to an internal
- Permission To Fail
- Fail to get datasource
- fail to make pycaffe
- Windows上安装TensorFlow
- 淘宝内部分享:怎么跳出MySQL的10个大坑
- 社会化媒体营销方案简介
- springMVC源码分析--ViewNameMethodReturnValueHandler返回值处理器(三)
- Web前端基础知识(1)
- bug宝典Node篇 Fail to decode request due to: RpcInvocation
- IDEA中怎么设置黑色或白色背景?
- Mysql主从复制,读写分离(mysql-proxy),双主结构完整构建过程
- sqlsrv函数(自用持续更新)
- 一些对计算机有用的资源
- 2317 Game(哈尔滨理工大学)
- 一次gitlab的重新启用之旅
- 正式运行的服务器,你都做过哪些优化
- 34. Search for a Range**