个人博客地址 studyidea.cn,点击查看更多原创文章

0x00. 前言

想象这样一个场景,线上某个服务突发异常,导致上游服务调用异常,数据处于中间状态。服务恢复之后,我们需要修复这笔数据至正常状态,怎么办?

如果仅是简单的服务,涉及少量数据变更,我们可以直接使用 SQL,变更数据状态。但是有些情况下,服务需要联动调用其他系统,变更其他系统数据。这种情况下,变更数据非常麻烦,需要与其他系统开发沟通,整理数据,一起变更。如果涉及还涉及外部系统,数据变更几乎玩不下去了。

如果服务接口能重试,重新调用,那么数据变更就交给服务自动去调用即可。这个过程我们需要组装参数,然后调用服务接口。如果你的服务采用 Http 接口,可以使用 Curl 等命令重试。如果你的服务使用 Dubbo ,这就需要使用到 Telnet 命令。

0x01. telnet 进入 Dubbo 调试

通过以下指令,连接 Dubbo 服务。

telnet IP PORT

#例如:

telnet localhost 20880

Dubbo 版本需要大于 2.0.5,远程调用需要注意网络是否可用

连上之后,按下回车键将会进入以下页面:

这个界面与 Shell 类似,需要我们输入相关命令。例如:

0x02. invoke 执行 Dubbo 方法

这里我们重点介绍 invoke 命令,该命令可以用来执行 Dubbo 服务,调用方式如下:

# 需要提前调用 cd XxxService,使这个服务成为缺省服务

invoke xxxMethod(1234, "abcd", {"prop" : "value"})

# 调用该服务的方法

invoke XxxService.xxxMethod(1234, "abcd", {"prop" : "value"})

# 调用全路径服务的方法,推荐使用这种方式,精确执行服务方法。

invoke 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,明确参数类型,例如:

{

"name": "11",

"age": 12,

"class":"xx.xx.Pojo"

}

如果没有传入,将会调用失败,相关问题可以参见这个 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权限。

欢迎关注我的公众号:程序通事,获得日常干货推送。如果您对我的专题内容感兴趣,也可以关注我的博客:studyidea.cn

dubbo的invoke命令_每日一技|巧用 Telnet 调试 Dubbo 服务相关推荐

  1. 每日一技|巧用 Telnet 调试 Dubbo 服务

    来自:程序通事 0x00. 前言 想象这样一个场景,线上某个服务突发异常,导致上游服务调用异常,数据处于中间状态.服务恢复之后,我们需要修复这笔数据至正常状态,怎么办? 如果仅是简单的服务,涉及少量数 ...

  2. 巧用 Telnet 调试 Dubbo 服务

    点击上方"JAVA葵花宝典" 回复"资源",领取全网最火的Java核心知识总结 0x00. 前言 想象这样一个场景,线上某个服务突发异常,导致上游服务调用异常, ...

  3. dubbo的invoke命令_dubbo 调试服务telnet命令

    1.概述 在我们使用dubbo实现分布式布局时,如果我们想测试我们刚写好的service层服务是否正确时,通常要将service层和web层同时开启,通过浏览器调用controller层端口,达到测试 ...

  4. 华为关闭telnet命令_华为AR28-11路由器如何关闭telnet服务?

    仅供参考:使用基本ACL配置交换机telnet访问的权限 组网需求 如图7-1所示,为了便于远程管理交换机,开启了telnet的服务,公司的所有网络管理员都可以登录 到交换机进行管理,但是为了安全考虑 ...

  5. Dubbo invoke命令使用

    首先使用telnet命令进入控制台 命令:telnet ip 端口 例如你的如果dubbo.protocol.port=29952 那么就是 telnet localhost 2995 然后使用inv ...

  6. 苹果nfc功能怎么开启_【每日一技】苹果iPhone如何开启NFC功能?

    苹果如何开启NFC功能,相信还有很多果粉都还不知道,下面小编就手把手教会你们. 方法步骤: 1.点击进入设置 2.找到"钱包与Apple Pay" 3.进入后开启"按两下 ...

  7. iphone主屏幕动态壁纸_【每日一技】使用“实况照片”打造iPhone锁屏动态壁纸

    原标题:[每日一技]使用"实况照片"打造iPhone锁屏动态壁纸 当我们使用 iPhone 拍照时,可以选择拍摄实况照片,iPhone 将会帮您录下拍照前后 1.5 秒所发生的一切 ...

  8. 艾为数字ic面试题_每日学习:数字后端面试100问(2019全新版)

    关注并标星大同学吧 每天1次,打卡学习 积累1个新知识,增1分职场底气 作者称谓:Tao涛 个人介绍:摸爬滚打多年的数字后端工程师 微信公众号:数字后端IC芯片设计 半导体知识分享第29期 技能升级, ...

  9. telnet调用dubbo服务命令小全

    dubbo支持通过telnet登录进行简单的运维,比如查看特定机器暴露的服务.显示服务连接列表.调用情况等,如果是生产环境调用接口,则需要提前检查好接口幂等性等问题. 测试服务提供者:EchoServ ...

最新文章

  1. 自动化运维Python系列(六)之面向对象
  2. php 不喜欢用对象,为什么PHP不在其默认库中使用对象?
  3. 发现保存GIF格式后相素发生变化咋办
  4. python语法学习—打印九九乘法表
  5. Chrome划词插件-有道词典
  6. Unix平台下的常用命令技巧之资源与性能
  7. [日常] 修改编辑word中的页眉页脚
  8. web day2 作业
  9. Tryhackme-New Year
  10. 基于android的校友帮平台系统
  11. 从零到一实现m3u8文件转成mp4文件
  12. 国内首个开源网络流量可视化分析平台 -- 流影
  13. 学生护眼灯色温多少合适?推荐色温在4000K的暖光护眼台灯
  14. devops涵盖的三个阶段_3个领域推动DevOps变革
  15. linux下定时备份文件,Linux下定时备份文件
  16. 防静电工作台检测标准是什么?
  17. 【老罗笔记】一万小时天才理论
  18. 一个很猛的MM被甩以后
  19. 通信原理第五章 基带信号的表示和传输
  20. 【软件工程】过程设计的工具

热门文章

  1. opporeno5k录屏方法详细分享
  2. “历史上的今天”web网站
  3. 联发科和高通缠斗,却再次证明落后苹果两代
  4. Vue3+TS手写音乐播放器
  5. C#实战007:Excel操作-创建Excel并保存
  6. 关于开发个简单应用(账号管家)的总结
  7. 180220——折腾:U盘作启动盘安装win 7
  8. DoTa、LOL类游戏转移视角及角色移动
  9. Stratasys:光固化3d打印机优缺点论点,需品牌品质落实
  10. java 显示行号_JTextArea显示行号