IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> deBug|黑马传智健康|com.alibaba.dubbo.rpc.RpcException -> 正文阅读

[网络协议]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包扫描开启位置错误(检查过了,无误)

搜了一圈,发现常见回答无法解决这个问题,然后我想起来了这个项目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个小时才找到的主要原因,对框架的实现流程配置文件背后的含义认识不够,这方面往后要补上,也是接触新技术时要着重学习的。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 19:17:01  更:2022-05-21 19:17:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:45:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码