学习笔记-Telnet 调试 Dubbo 服务

前言

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

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

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

telnet 进入 Dubbo 调试

通过以下指令,连接 Dubbo 服务。(Dubbo 版本需要大于 2.0.5,远程调用需要注意网络是否可用)

1telnet  IP PORT
2#例如:
3telnet localhost 20880

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

 

 

 

这个界面与 Shell 类似,需要我们输入相关命令(命令参考手册:http://dubbo.apache.org/zh-cn/docs/user/references/telnet.html)。例如

 

 

 

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"})

  运行结果如下:

 

 

  注意点

  Invoke 命令内部使用 FastJson,将字符串转化为 Json 对象。Dubbo Telnet命令,调用invoke命令,可以调用 Dubbo 服务,解决一些生产应急事件。但是玩归玩,闹归闹,别把生产开玩笑。随意使用 invoke 命令还是存在一定危险性,只要知道方法类,服务参数组装规则,就可以远程执行方法,所以生产系统建议按需申请 invoke权限。

 

posted @ 2017-10-30 14:37  小杨ABC  阅读(246)  评论(0编辑  收藏  举报