巧用 Telnet 调试 Dubbo 服务
点击上方“JAVA葵花宝典“
回复“资源”,领取全网最火的Java核心知识总结
0x00. 前言
想象这样一个场景,线上某个服务突发异常,导致上游服务调用异常,数据处于中间状态。服务恢复之后,我们需要修复这笔数据至正常状态,怎么办?
如果仅是简单的服务,涉及少量数据变更,我们可以直接使用 SQL
,变更数据状态。但是有些情况下,服务需要联动调用其他系统,变更其他系统数据。这种情况下,变更数据非常麻烦,需要与其他系统开发沟通,整理数据,一起变更。如果涉及还涉及外部系统,数据变更几乎玩不下去了。
如果服务接口能重试,重新调用,那么数据变更就交给服务自动去调用即可。这个过程我们需要组装参数,然后调用服务接口。如果你的服务采用 Http
接口,可以使用 Curl
等命令重试。如果你的服务使用 Dubbo
,这就需要使用到 Telnet
命令。
0x01. telnet 进入 Dubbo 调试
通过以下指令,连接 Dubbo 服务。
1telnet IP PORT
2#例如:
3telnet localhost 20880
Dubbo 版本需要大于 2.0.5,远程调用需要注意网络是否可用
连上之后,按下回车键将会进入以下页面:
这个界面与 Shell
类似,需要我们输入相关命令。例如:
命令参考手册:http://dubbo.apache.org/zh-cn/docs/user/references/telnet.html。
0x02. invoke 执行 Dubbo 方法
这里我们重点介绍 invoke
命令,该命令可以用来执行 Dubbo
服务,调用方式如下:
1# 需要提前调用 cd XxxService,使这个服务成为缺省服务
2invoke xxxMethod(1234, "abcd", {"prop" : "value"})
3# 调用该服务的方法
4invoke XxxService.xxxMethod(1234, "abcd", {"prop" : "value"})
5# 调用全路径服务的方法,推荐使用这种方式,精确执行服务方法。
6invoke com.xxx.XxxService.xxxMethod(1234, "abcd", {"prop" : "value"})
运行结果如下:
槽点:mac 平台 iterm2 使用 telnet 命令进入 Dubbo 调试,中文输入将会乱码,使用 SecureCRT telnet 就不会乱码。感觉是 mac 平台终端问题,不知道各位小伙伴有没有碰到过?有解决办法的小伙伴,欢迎留个言。
注意点
Invoke
命令内部使用 FastJson
,将字符串转化为 Json
对象。
tips: 如果参数为 数组,
List
,Map
,小黑哥有时候想不到怎么转成 Json 字符串。现在知道底层原理了,就好办了。可以先将数组,List,Map 对象参数组装好,然后调用 FastJson
JSONObject.toJSONString(array)
得到json
字符串。不同版本解码方式不一样
2.5.3 解码方式:
list = (List) JSON.parse("[" + args + "]", List.class);2.7.0 解码方式:
list = JSON.parseArray("[" + args + "]", Object.class);
某些 Dubbo
版本 POJO
参数对象需要在 json
字符串中需要指定 class
,明确参数类型,例如:
1{
2 "name": "11",
3 "age": 12,
4 "class":"xx.xx.Pojo"
5}
如果没有传入,将会调用失败,相关问题可以参见这个 Issue:https://github.com/apache/dubbo/issues/3105。所以如果方法参数为 POJO
对象,最好在 json
中传入 class
。
0x03. select 命令与意外之喜
Dubbo
最新版本,如果服务存在多个相同参数的重载方法,且没有使用 class
来明确参数类型,提示用户使用新增的select
命令来选择要调用的方法。
小黑哥在测试 select
命令的过程中发现了一个 Bug,select
执行未选中的方法。如上,我使用 select 1
希望执行 1. hello(HelloRequest)
,但是实际上执行的是 2. hello(HelloRequestV2)
。当输入 select 2
时,执行结果如下:
这个 Bug 详情参考小黑哥提的这个 issue https://github.com/apache/dubbo/issues/5707。这个修复很简单,小黑哥已提交 PR 修复该 Bug。
没想到,写这篇文章过程中,还能发现一个 Bug,然后成为 Dubbo Committer,哈哈哈哈。
0x04. 总结
Dubbo Telnet
命令,调用invoke
命令,可以调用 Dubbo
服务,解决一些生产应急事件。
但是玩归玩,闹归闹,别把生产开玩笑。
随意使用 invoke
命令还是存在一定危险性,只要知道方法类,服务参数组装规则,就可以远程执行方法,所以生产系统建议按需申请 invoke
权限。
关注一起成长
巧用 Telnet 调试 Dubbo 服务相关推荐
- 每日一技|巧用 Telnet 调试 Dubbo 服务
来自:程序通事 0x00. 前言 想象这样一个场景,线上某个服务突发异常,导致上游服务调用异常,数据处于中间状态.服务恢复之后,我们需要修复这笔数据至正常状态,怎么办? 如果仅是简单的服务,涉及少量数 ...
- dubbo的invoke命令_每日一技|巧用 Telnet 调试 Dubbo 服务
个人博客地址 studyidea.cn,点击查看更多原创文章 0x00. 前言 想象这样一个场景,线上某个服务突发异常,导致上游服务调用异常,数据处于中间状态.服务恢复之后,我们需要修复这笔数据至正常 ...
- telnet调用dubbo服务命令小全
dubbo支持通过telnet登录进行简单的运维,比如查看特定机器暴露的服务.显示服务连接列表.调用情况等,如果是生产环境调用接口,则需要提前检查好接口幂等性等问题. 测试服务提供者:EchoServ ...
- Dubbo服务测试方法
Dubbo服务发布之后,除了编写Dubbo Consumer服务调用去测试,我们也可以利用telnet命令进行调试.管理.Dubbo 2.0.5以上版本服务提供端口支持telnet命令.本篇文章介绍一 ...
- dubbo服务调试管理实用命令
公司如果分项目组开发的,各个项目组调用各项目组的接口,有时候需要在联调环境调试对方的接口,可以直接telnet到dubbo的服务通过命令查看已经布的接口和方法,并能直接invoke具体的方法,我们可 ...
- 3分钟了解dubbo服务调试管理实用命令
公司如果分项目组开发的,各个项目组调用各项目组的接口,有时候需要在联调环境调试对方的接口,可以直接telnet到dubbo的服务通过命令查看已经布的接口和方法,并能直接invoke具体的方法,我们可以 ...
- python telnet server_python工具库介绍-dubbo:通过telnet接口访问dubbo服务
简介 dubbo服务发布之后,我们可以利用telnet命令进行调试.管理.更多资料参见 Telnet命令参考手册 telnet 调用示例: $ telnet 172.17.103.110 9097 T ...
- 命令行调用dubbo服务
dubbo服务发布之后,我们可以利用telnet命令进行调试.管理. Dubbo2.0.5以上版本服务提供端口支持telnet命令,下面我以通过实例抛砖引玉一下: 1.连接服务 测试对应IP和端口下的 ...
- dubbo服务发布一之服务暴露
整体流程以调试 om.alibaba.dubbo.demo.provider.DemoProvider来演示dubbo服务的发布流程. 1.启动Spring容器 参照dubbo容器的启动, https ...
最新文章
- 微信小程序----map组件实现(获取定位城市天气或者指定城市天气数据)
- 【LeetCode】排序
- ubuntu安装mysql远程_Ubuntu18.04下远程安装MySQL
- 手机操作系统如何实现跨平台开发和使用
- “约见”面试官系列之常见面试题之第五十四篇之语义化标签(建议收藏)
- 程序员必看—程序员如何高效提升自己?
- 菜鸟驿站是什么快递_菜鸟驿站是什么快递
- 2021年高压电工考试题及高压电工理论考试
- Markdown pad2 使用本地图片
- Ciri智能语音系统
- 掌门教育秉持因材施教原则,打造个性化教学模式
- 笔记本电脑没有WiFi选项,3个小时,我试了以下N种方法,终于出现网络了!
- 公众号排版|点击图片播放音乐你不会还不会吧
- push进队列的C2075错误
- linux lsmod命令详解
- 推荐给大家推荐一款可以修改图片的工具iSee
- 大话卫星导航中的信号处理系列文章——全球卫星导航系统介绍
- 人工智能之python打卡学习100天计划-day11
- 什么是SDK?MFC?
- 硬件笔试面试---1
热门文章
- Excel-统一小括号格式(中文小括号,英文小括号)
- IO流--打印流pritStream
- 2020-11-09 mintUI框架 ios没法上拉问题
- (转)聚集索引和非聚集索引(整理)
- 谷歌搜索量查询_最大化的搜索量:如何使用Google来提供快速,准确的结果
- 程序员如何开启老干妈瓶盖
- 东汤温泉.5 (照片50张,外链)
- 经常戴耳机有什么危害呢?如何做到在戴耳机听歌时保护耳朵听力
- JAVA毕业设计个人图集管理系统计算机源码+lw文档+系统+调试部署+数据库
- 第一次写BP神经网络,求指点【哭脸】