deBug|黑马传智健康|com.alibaba.dubbo.rpc.RpcException

2023-10-28 22:20

本文主要是介绍deBug|黑马传智健康|com.alibaba.dubbo.rpc.RpcException,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

​简述:黑马传智健康项目day2中,给的资料是有错误的,在health_service_provider模块中的web.xml文件加载spring容器的配置命令出错了,classpath*:applicationContext*.xml是错误的,应当是classpath*:spring*.xml。
这个错了
下面这张图才对
这个才对

这是由于配置文件名称都被设计成了如下如:
在这里插入图片描述


  • 具体异常描述:

com.alibaba.dubbo.rpc.RpcException: No provider available from registry 120.25.85.89:21 81 for service com.itheima.service.CheckItemService on consumer 192.168.60.1 use dubbo version 2.6.0, may be providers disabled or not registered ?

  • 背景:

是这样的,我在做传智健康项目day2,当我把业务代码实现了,打算测试一下程序,发现无法实现需求,后来找到大致原因,报了这个异常,有点意外,因为我基本上都是cv的,遂开始找bug出在哪里。

这个项目是分布式项目,是由dubbo实现的,也就是说服务之间的通讯由dubbo负责。

  • debug过程:
    本次debug用时约4小时,流程如下:

我想实现的功能是通过表单增加一个检查项,也就是往数据库增加一条信息,但是一直失败,无法增加数据进入数据库;

刚开始的时候我还不知道是RpcException这个异常,因为会报错的地方被try-catch了,且没有打印异常!后面排错的时候才发现这个问题的,才让我debug之路走了下去。

因为我不懂前端,所以直接把教程的前端页面cv过来,因此我认为错误不是出在前端,于是我认为错误出在了后端,那就从后端逻辑最开始地方开始排查,看看是不是controller搞错了,然后检查了controller的一些基本要求——注释,映射地址,代码逻辑,逐一看下来,都没有错,再看看细节吧,看看包有没有引错,毕竟重名的包那么多,发现没也没问题。
我的头大起来了,然后展开分析
又到了与空气斗智斗勇的时刻了
大约思考了半分钟,我突然想到了什么,我竟然忘记了最重要也最好用的工具——debug!断点一打,绿色小甲虫启动,让我看看哪里除了幺蛾子,逐一走下来,发现原来是controller那里边除了问题,指令以进入到方法里,就报错,然后这个try-catch竟然还没有打印错误!

但凡try-catch一定要打印异常,方便后续检查,减少寻找bug的时间

太让人吃惊了,try-catch竟然不打印错误,这不是坑人是啥。。。遂补上打印语句
System.out.println(e);
e.printStackTrace();
一句不够清楚,我要看两句(其实没必要),于是乎问题出来了,是
com.alibaba.dubbo.rpc.RpcException
emmm?一看描述:
com.alibaba.dubbo.rpc.RpcException: No provider available from registry 120.25.85.89:21 81 for service com.itheima.service.CheckItemService on consumer 192.168.60.1 use dubbo version 2.6.0, may be providers disabled or not registered ?
虽然我没有见过这玩意,但是看描述感觉和大名鼎鼎的空指针异常有异曲同工之妙——都是找不着。
意思是提供服务的那个小程序(就是另一个module)找不到,没法提供服务,然后就报错了。至于错在哪,不知道,我思考了一分钟,没有头绪,于是乎开始求助于搜索引擎。
因为了有异常和异常描述的助力,我的搜索有了方向——我把异常名称及描述输入搜索框,出来了很多种解决方案:

  1. 同名导包异常(我已排除)
  2. 事务与远程调用不能同时开启(尝试了一下,没用)
  3. 没有开启zookeeper,或zk错误启动(学了半个小时zk,发现启动正常,排除该项)
  4. dubbo的包扫描未开启or包扫描开启位置错误(检查过了,无误)

其实看到报错,正确的做法应该是解读报错,我当时(2022.5)做这个项目的时候能力不够,导致无法把报错解读的很好,只是暴力的去搜索相关内容去解决bug,这样会导致我解决问题的速度很慢,如今这个项目做完一年了,我回过头来看,发现当时的分析不切要害,以下是我当下的分析:
这个错误的意思是,CheckItemService没办法找到地址是120.25.85.89的服务,请求是从CheckItemService发出的,向120.25.85.89注册的服务请求服务,但是找不到。
在报错中也提到了,导致这个错误的有两个原因——地址错误了或者是没有这个服务。而没有这个服务可能是因为服务没有发布,而导致服务没有发布的原因可能是服务配置错误。
因此要做的事情是去检查地址是否正确,查看服务是否正确发布。而问题实际上就是出现在服务没有正确配置上面,只要把服务配置好,这个问题就解决了。
解决这个bug其实关键在于是否了解dubbo,知道rpc是什么,显然当时我只懂按照文档配置dubbo,并不知道配置的内容具体的含义是什么,这样照猫画虎的去做项目,出了bug去调试时要花费更多的时间与精力,而且也不会使技术能力精进
-2023年8月11日 增加

搜了一圈,发现常见回答无法解决这个问题,然后我想起来了这个项目b站应该是有视频的,而根据b站良好的氛围,往往有意想不到的收获。

下面的评论区一般会把本项目,特别是同样的教程资料中的常见问题提出来,以避免后人踩坑互助精神!

果然,在评论区下发现了有人指出

资料里web是xxxapplicationxxxx.xml 而项目里是springxxx.xml 改成 classpath*:spring*.xml就行。

!!我怎么都没想到,教程竟然会在如此低级地方出错


回过神来,我反思自己debug的过程,发现自己许多不足的地方:

  1. 寻找bug没有章法。在排除代码和逻辑错误时花费太多时间,在花费了半个多小时想起debug这个工具,找到RpcException的时间花费太多了。正确的做法应当是:扫一眼代码和逻辑,看是否有明眼可见的错误,这个过程一定要快,不必细究,然后直接进入debug环节,寻找真正的问题出在哪里。
  2. 在选择项目前没做好准备。dubbo和zookeeper都是我之前没接触过的技术,我再怎么样也要花上一两个小时读下入门教程再开始项目,这样我对项目的整体流程才能有更清晰的认识和了解,不然在debug的时候再去学习,很影响心情。
  3. 对WebE基本常识和流程不够熟悉。不然检查肯定从容器注入开始了,我把其他的配置文件检查了那么多遍,唯独没有检查web.xml,原因很多:spring全家桶用惯了,对配置文件生疏了;JavaWeb的基础流程记忆不够清晰。

我觉得2,3是这个bug找了4个小时才找到的主要原因,对框架的实现流程配置文件背后的含义认识不够,这方面往后要补上,也是接触新技术时要着重学习的。

这篇关于deBug|黑马传智健康|com.alibaba.dubbo.rpc.RpcException的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/296343

相关文章

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

【多系统萎缩患者必看】✨维生素补充全攻略,守护你的健康每一天!

亲爱的朋友们,今天我们要聊一个既重要又容易被忽视的话题——‌多系统萎缩患者如何科学补充维生素‌!🌟 在这个快节奏的生活中,健康成为了我们最宝贵的财富,而对于多系统萎缩(MSA)的患者来说,合理的营养补充更是维护身体机能、提升生活质量的关键一步。👇 🌈 为什么多系统萎缩患者需要特别关注维生素? 多系统萎缩是一种罕见且复杂的神经系统疾病,它影响身体的多个系统,包括自主神经、锥体外系、小脑及锥

Dubbo学习入门

本文参考自:Dubbo用户手册(中文)http://dubbo.apache.org/books/dubbo-user-book/ 现在的参考文档地址:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html 入门请参考自《Dubbo用户手册(中文)》第一节,在手册第二节说明如何快速启动Dubbo,下面就顺着手册的使用方式,自己搭建一个快

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 (debug笔记)

Nn criterions don’t compute the gradient w.r.t. targets error「pytorch」 ##一、 缘由及解决方法 把这个pytorch-ddpg|github搬到jupyter notebook上运行时,出现错误Nn criterions don’t compute the gradient w.r.t. targets error。注:我用

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException异常

用Gson解析json数据的时候,遇到一个异常,如下图: 这个异常很简单,就是你的封装json数据的javabean没有写对,你仔细查看一下javabean就可以了 比如:我的解析的代码是             Gson gson = new Gson();             ForgetJson rb = gson.fromJson(agResult.mstrJson, For

Matlab实现RPC算法

RPC(Remote Procedure Call,远程过程调用)是一个在计算机网络中常用的技术,允许一个程序调用另一个地址空间(通常位于另一台计算机上)的过程或函数,就像调用本地程序中的函数一样。 下面是一个简化的示例,展示如何使用 Matlab 的 TCP/IP 套接字功能来模拟 RPC 调用。在这个例子中,我们将创建一个简单的服务器(server.m),它监听一个端口并响应客户端(clie

2025届计算机毕业设计:如何构建Java SpringBoot+Vue个人健康档案管理系统?

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 | SpringBoot/SSM Python实战项目 | Django 微信小程序/安卓实战项目 大数据实战项目 ⚡⚡文末获取源码 文章目录

The import com.google cannot be resolved

The import com.google cannot be resolved,报错: 第一感觉就是缺少jar包,因为项目用maven管理,所以在pom.xml中添加: <dependency>  <groupId>com.google.code.gson</groupId>  <artifactId>gson</artifactId>  <version>2.3.1</ver

idea 怎么调试debug

1、这里以一个web工程为例,点击图中按钮开始运行web工程。 2、设置断点 3、使用postman发送http请求 4、请求发送之后会自动跳到断点处,并且在断点之前会有数据结果显示 5、按F8 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则不进入当前方法体内,跳到下一条执行语句。 6、按F7在 Debug 模式下,进入下一步,如果当

dubbo服务过程

dubbo服务暴露过程 Dubbo通过实现ApplicationListener接口,监听了容器刷新的事件,再容器刷新后调用onApplicationEvent方法,这个是服务暴露的启动点通过识别带目标注解的服务类通过动态代理统一暴露出Invoker,如何通过配置文件以及目标协议(SPI机制)封装成exporter存储起来如果是本地注册,将exporter存入ServiceConfig的缓存,如