生产中与其他厂商的微服务进行rpc间的调用时,dubbo抛出 Fail to decode request due to: RpcInvocation的异常。

目录

  • 一、问题的起源
  • 二、问题的处理
    • ① 检查dubbo中comsuer、provider中接口方法是否注册
    • ②查看provider的实时日志发现,dubbo报出以下提示
    • ③对比provider、consumer中setlListInfoUpldA方法的入参
    • ④ 将provider、consumer中setlListInfoUpldA方法入参中相同字段的类型保持一致
  • 三、问题的验证
    • ①观察实时日志发现,此时dubbo间服务的调用已经通了,只是服务抛出了dubbo的异常信息,并未将代码的错误信息真正抛出。

一、问题的起源

微服务通过dubbo的调用时报错信息如下:

{"output":null,"infcode":-1,"inf_refmsgi`d`":null,"refmsg_time":null,"respond_time":null,"err_msg":"fsi调用mbs异常:Failed to invoke the method setlListInfoUpldA in the service cn.hsa.mbs.fmi.api.medinfoupload.service.FmiMedInfoUploadService. Tried 3 times of the providers [10.130.128.178:20880] (1/1) from the registry powercloud.nginx:20003 on the consumer 10.130.130.109 using the dubbo version 2.7.3. Last error is: Failed to invoke remote method: setlListInfoUpldA, provider: dubbo://10.130.128.178:20880/cn.hsa.mbs.fmi.api.medinfoupload.service.FmiMedInfoUploadService?anyhost=true&application=hsa-mbs-fsi-nation&bean.name=cn.hsa.mbs.fmi.api.medinfoupload.service.FmiMedInfoUploadService&category=providers&check=false&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&group=rpc-mbs&interface=cn.hsa.mbs.fmi.api.medinfoupload.service.FmiMedInfoUploadService&lazy=false&methods=getTcmDiseByDiseName,setlListInfoUpldA,getWmDiseByDiseName,querySetlListInfo,querySetlDetail,setlListInfoUpld,querySetlList,ownpayPatnMdtrtUpld,queryAdmdvsTreeAll&path=cn.hsa.mbs.fmi.api.medinfoupload.service.FmiMedInfoUploadService&pid=115592&protocol=dubbo&qos.enable=false&register=true&register.ip=10.130.130.109&release=2.7.3&remote.application=hsa-mbs-local&revision=1.0.0&side=consumer&sticky=false&timeout=30000&timestamp=1651394722080&version=1.0.0, cause: org.apache.dubbo.remoting.RemotingException: Fail to decode request due to: RpcInvocation [methodName=setlListInfoUpldA, parameterTypes=null, arguments=null, attachments={path=cn.hsa.mbs.fmi.api.medinfoupload.service.FmiMedInfoUploadService, input=6565, dubbo=2.0.2, version=1.0.0}]"}

二、问题的处理

① 检查dubbo中comsuer、provider中接口方法是否注册


consumer中的setlListInfoUpldA方法是注册到dubbo中的。

provider中的setlListInfoUpldA方法也是存在的。

②查看provider的实时日志发现,dubbo报出以下提示


发现provider实时日志中,只是Warn入参的字段类型转化异常,并未提示Error。

③对比provider、consumer中setlListInfoUpldA方法的入参


发现provider中setlListInfoUpldA方法入参中lv3NurscareDays字段的类型为BigDecimal,而consumer中lv3NurscareDays字段的类型为Integer。

④ 将provider、consumer中setlListInfoUpldA方法入参中相同字段的类型保持一致

三、问题的验证

①观察实时日志发现,此时dubbo间服务的调用已经通了,只是服务抛出了dubbo的异常信息,并未将代码的错误信息真正抛出。

   "err_msg": "fsi调用mbs异常:Failed to invoke the method setlListInfoUpldA in the service cn.hsa.mbs.fmi.api.medinfoupload.service.FmiMedInfoUploadService. Tried 3 times of the providers [10.130.128.178:20880] (1/1) from the registry powercloud.nginx:20003 on the consumer 10.130.130.109 using the dubbo version 2.7.3. Last error is: Failed to invoke remote method: setlListInfoUpldA, provider: dubbo://10.130.128.178:20880/cn.hsa.mbs.fmi.api.medinfoupload.service.FmiMedInfoUploadService?anyhost=true&application=hsa-mbs-fsi-nation&bean.name=cn.hsa.mbs.fmi.api.medinfoupload.service.FmiMedInfoUploadService&category=providers&check=false&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&group=rpc-mbs&interface=cn.hsa.mbs.fmi.api.medinfoupload.service.FmiMedInfoUploadService&lazy=false&methods=getTcmDiseByDiseName,setlListInfoUpldA,querySetlListInfo,getWmDiseByDiseName,setlListInfoUpld,querySetlDetail,ownpayPatnMdtrtUpld,querySetlList,queryAdmdvsTreeAll&path=cn.hsa.mbs.fmi.api.medinfoupload.service.FmiMedInfoUploadService&pid=139627&protocol=dubbo&qos.enable=false&register=true&register.ip=10.130.130.109&release=2.7.3&remote.application=hsa-mbs-local&revision=1.0.0&side=consumer&sticky=false&timeout=30000&timestamp=1652856548356&version=1.0.0, cause: org.apache.dubbo.remoting.RemotingException: java.io.IOException: Response data error, expect Throwable, but get {code=240000, suppressedExceptions=[], cause=(this Map), stackTrace=[Ljava.lang.StackTraceElement;@2f51191c, detailMessage=查询不到对应的医师或护士,请求确认蚕食是否正确}\njava.io.IOException: Response data error, expect Throwable, but get {code=240000, suppressedExceptions=[], cause=(this Map), stackTrace=[Ljava.lang.StackTraceElement;@2f51191c, detailMessage=查询不到对应的医师或护士,请求确认蚕食是否正确}\n\tat org.apache.dubbo.rpc.protocol.dubbo.DecodeableRpcResult.handleException(DecodeableRpcResult.java:146)\n\tat org.apache.dubbo.rpc.protocol.dubbo.DecodeableRpcResult.decode(DecodeableRpcResult.java:96)\n\tat org.apache.dubbo.rpc.protocol.dubbo.DecodeableRpcResult.decode(DecodeableRpcResult.java:112)\n\tat org.apache.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:92)\n\tat org.apache.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:122)\n\tat org.apache.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:82)\n\tat org.apache.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:48)\n\tat org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter$InternalDecoder.decode(NettyCodecAdapter.java:90)\n\tat io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:502)\n\tat io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:441)\n\tat io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:278)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:345)\n\tat io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:337)\n\tat io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1408)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:359)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:345)\n\tat io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:930)\n\tat io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:677)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:612)\n\tat io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:529)\n\tat io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:491)\n\tat io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:905)\n\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n\tat java.lang.Thread.run(Thread.java:748)\n",

【dubbo异常处理】Fail to decode request due to: RpcInvocation相关推荐

  1. 记录一次服务妻出现The server is temporarily unable to service your request due to maintenance

    The server is temporarily unable to service your request due to maintenance 经过查找,是因为服务器过载了宕机 解决办法参考 ...

  2. ImmutableList hessian2序列化失败问题分析

    问题描述 A服务提供了个RPC接口给B服务使用,入参里有个参数是List类型,B服务在传参时使用Guava里的 ImmutableList,结果发生报错. 其中,B服务即consumer端的异常为:「 ...

  3. dubbo(5) Dubbo源码解析之服务调用过程

    来源:https://juejin.im/post/5ca4a1286fb9a05e731fc042 Dubbo源码解析之服务调用过程 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与 ...

  4. dubbo-go 白话文 | 从零搭建 dubbogo 和 dubbo 的简单用例

    作者 | 铁城 dubbo-go 社区 committer 来源|阿里巴巴云原生公众号 本文将手把手教你使用 dubbogo 调用 dubbogo 或 dubbo 提供的服务提供方. 前言 本文基于 ...

  5. 面试题:DUBBO源码使用了哪些设计模式

    0 文章概述 DUBBO作为RPC领域优秀开源的框架在业界十分流行,本文我们阅读其源码并对其使用到的设计模式进行分析.需要说明的是本文所说的设计模式更加广义,不仅包括标准意义上23种设计模式,还有一些 ...

  6. dubbo调用service后返回对象null_dubbo-go 白话文 | go 和 java 互通有无

    本文从一个 BUG 入手,手把手教你 dubbogo 调用 dubbogo 或 dubbo 服务 一.前言 昨天邹部长在群里@我让看一个关于 dubbogo 调用 dubbo 报错的问题,问题issu ...

  7. dubbo的handler机制

    Dubbo的整套handler...反正我刚看的时候挺头疼.从Protocol层到Transporter层.纵深3层.从DubboProtocol构建,被逐层传递到NettyServer,然后在逐层返 ...

  8. 编码踩坑——dubbo异常“Service not found“

    今天接到一个开发任务,需要在工程A的原dubbo接口上新增一个方法来支持业务需求,于是分分钟CTRL+C/V完成了开发任务,准备自测:自测方法是首先本地打新的二方SNAPSHOT包,然后启动应用,准备 ...

  9. Dubbo(十四)源码解析 之 远程调用

    远程调用主要处理三个流程: 消费者向提供者发起请求 提供者处理消费者请求 消费者处理提供者响应 1. NettyClient 的创建 上一章服务订阅,有两个地方没有说完,其中之一:无论是本地注册表方式 ...

  10. Atitit s2018 s4 doc list dvchomepc dvccompc.docx .docx \s2018 s4 doc compc dtS44 \s2018 s4 doc dvc

    Atitit s2018 s4 doc list dvchomepc dvccompc.docx .docx \s2018 s4 doc compc dtS44 \s2018 s4 doc dvcCo ...

最新文章

  1. 【转载】“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
  2. python中画圆的代码_Python编程12:Python画图之turtle库如何画圆
  3. 【深度学习模型的训练与评估】一个实例:Iris多分类
  4. 阿里云云治理中心正式上线,助力企业快速云落地
  5. SpringBoot入门之简单配置
  6. Xcode6无法安装VVDocumenter插件的解决方法
  7. 基于WEB的达内学子书城/商城源代码
  8. Origin绘制带标签热图
  9. 加壳与脱壳知识点(持续更新)
  10. 今天开始做战斗,回合制战斗代码实现第一篇补充,从头开始,简单的2d回合制游戏一些文档方面的知识
  11. Spring Boot 网易云课堂
  12. Java基础之父类引用指向子类对象
  13. EXCEl2013 创建下拉菜单
  14. maven 中央仓库网址
  15. 解决mysql安装后无法设置初始密码的问题,亲测有效
  16. 怎么让计算机联网,如何让电脑自动联网
  17. VPC5021电流模式 PWM 控制器 3uA 超低启动电流
  18. DFS深度优先搜索中的标记问题
  19. Windows中的共享文件和文件服务器
  20. 条码扫描枪----针对MS-3扫码器的工作原理

热门文章

  1. 自制Anki选择题模板(支持桌面版/移动版)
  2. 如何删除WORD中的空白行以及换行符
  3. 511遇见易语言取屏幕分辨率和设置屏幕分辨率
  4. python pdfminer的功能_使用Python pdfMiner提取每页文本?
  5. WPS页眉页脚怎么设置每页不同
  6. python如何爬有道翻译_基于python爬取有道翻译过程图解
  7. python判断素数的函数_python判断是否为素数
  8. HDU 1097 JAVA
  9. ubuntu1804安装python3.8+odoo14
  10. 如何释放计算机的ip地址,电脑执行释放DNS和更新IP的命令是什么?怎么执行