1. 程式人生 > >每日一技|巧用 Telnet 除錯 Dubbo 服務

每日一技|巧用 Telnet 除錯 Dubbo 服務

個人部落格地址 studyidea.cn,點選檢視更多原創文章

0x00. 前言

想象這樣一個場景,線上某個服務突發異常,導致上游服務呼叫異常,資料處於中間狀態。服務恢復之後,我們需要修復這筆資料至正常狀態,怎麼辦?

如果僅是簡單的服務,涉及少量資料變更,我們可以直接使用 SQL,變更資料狀態。但是有些情況下,服務需要聯動呼叫其他系統,變更其他系統資料。這種情況下,變更資料非常麻煩,需要與其他系統開發溝通,整理資料,一起變更。如果涉及還涉及外部系統,資料變更幾乎玩不下去了。

如果服務介面能重試,重新呼叫,那麼資料變更就交給服務自動去呼叫即可。這個過程我們需要組裝引數,然後呼叫服務介面。如果你的服務採用 Http

介面,可以使用 Curl 等命令重試。如果你的服務使用 Dubbo ,這就需要使用到 Telnet 命令。

0x01. telnet 進入 Dubbo 除錯

通過以下指令,連線 Dubbo 服務。

telnet  IP PORT
#例如:
telnet localhost 20880

Dubbo 版本需要大於 2.0.5,遠端呼叫需要注意網路是否可用

連上之後,按下回車鍵將會進入以下頁面:

這個介面與 Shell 類似,需要我們輸入相關命令。例如:

命令參考手冊:http://dubbo.apache.org/zh-cn/docs/user/references/telnet.html。

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: 如果引數為 陣列,ListMap,小黑哥有時候想不到怎麼轉成 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

相關推薦

每日技|巧 Telnet 除錯 Dubbo 服務

個人部落格地址 studyidea.cn,點選檢視更多原創文章 0x00. 前言 想象這樣一個場景,線上某個服務突發異常,導致上游服務呼叫異常,資料處於中間狀態。服務恢復之後,我們需要修復這筆資料至正常狀態,怎麼辦? 如果僅是簡單的服務,涉及少量資料變更,我們可以直接使用 SQL,變更資料狀態。但是有些情

老男孩linux每日題的學習(linux服務器如何防止木馬)

linux 運維 安全linux的木馬通過web的上傳目錄把木馬傳到linux服務器。對用戶可以上傳的文件類型和上傳位置進行嚴格限制用戶上傳的文件在服務器中的權限設成可讀用戶的上傳目錄在所屬主和所屬組有較小合適 的權限對重要的配置文件和web文件作mda5校驗以及備份對服務器開放的端口和運行的程序進行監控,經

SpringCloud(springboot實現簡單服務呼叫

分享一下我老師大神的人工智慧教程吧。零基礎,通俗易懂!風趣幽默!http://www.captainbed.net/ 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

老男孩教育每日題-第63天-批量創建戶並設置隨機密碼(要求不能使用shell循環語句)

每日一題 隨機數 命令拼接 題目:批量添加20個用戶,用戶名為user1~20,密碼為5個隨機字符(要求不能使用shell循環語句)解決方法方法1 echo user{1..20}|xargs -n1|sed -r ‘s#(.*)#useradd \1 \&\& echo \1 &

老男孩教育每日題-第106天-MySQL如何授權戶admin:password遠程訪問權限

每日一題 mysql添加用戶 解答:假定內網網段172.16.1.0,用戶admin,密碼password,數據庫oldboy。只創建用戶:create user [email protected]/* */%‘ identified by ‘password‘;創建用戶並授權數據庫權限,

愛創課堂每日題第五十五天- WEB應用從服務器主動推送Data到客戶端有那些方式?

前端 前端學習 前端入門Javascript數據推送Commet:基於HTTP長連接的服務器推送技術基於WebSocket的推送方案SSE(Server-Send Event):服務器推送數據新方式愛創課堂每日一題第五十五天- WEB應用從服務器主動推送Data到客戶端有那些方式?

兩份重磅報告摘讀:三分之私有雲企業采了抗D服務

雲計算 私有雲 北京時間3月22日消息,中國信通院在國家會議中心舉辦的“OSCAR雲計算開源產業大會”上發布了《中國雲計算開源發展調查報告》、《中國私有雲發展調查報告》,對外公開了他們在雲計算開源和私有雲發展方面的調查結果。兩份報告,也重點提及安全方面的現狀,易盾從中摘出相關內容,供大家參考。以下是摘

每日記:郵件服務器:Postfix

最大 out tco 編寫 ffice 復制 刪除 顯示 發出 郵件服務器:Postfixmail server與DNS的關系:1、架設mail server 必須要有合法的主機名2、DNS的反解也很重要要架設一部mail server,務必向上層ISP申請IP反解的對應,

每日記:WWW服務器相關知識點

crt override tput 服務器 查看 info 狀態 res 方法 WWW服務器 :瀏覽器比較常支持的協議有:http、https、ftp、telnet等等,還有類似news、gopherWWW server/client 間數據傳輸的方式:GET :瀏覽器直接

每日記:Linux新防火墻Firewalld動態防火墻管理器服務簡單探索

rule change work asq manager 要點 目前 目標 move Firewalld動態防火墻管理器服務(Dynamic Firewall Manager of Linux systems)是目前默認的防火墻管理工具,同時擁有命令行終端和圖形化界面的配置

分布式系列 - dubbo服務telnet命令【轉】

telnet 手冊 log 分享 cal 利用 令行 使用 area dubbo服務發布之後,我們可以利用telnet命令進行調試、管理。Dubbo2.0.5以上版本服務提供端口支持telnet命令,下面我以通過實例拋磚引玉一下: 1.連接服務 測試對應

每日記:DNS服務

帶寬 聯機 nec 還原 ESS forward htm days only 主機名控制者: DNS 服務器在私有網域內部,最好將所有的私有IP與主機名對應都寫入 /etc/hosts 檔案中DNS是一種因特網的通訊協議名稱,而Bind則是提供這個DNS服務的軟件 完整主機

PXE+kickstart批量為20臺新服務器安裝centos7

根據 命令行界面 exe user size linux c mman win8 windows 基於PXE+kickstart批量安裝centos7: 本文是純文字,後續會補充圖片 1.環境: CentOS Linux release 7.4.1708 (Core)ker

dubbo服務調

默認 image 協議 變更 中心 圖片 eight 自己 服務調用 1、Dubbo的缺省(默認)協議:采用單一長連接和NIO異步通訊。 2、 3、調用關系說明 0. 服務容器負責啟動,加載,運行服務提供者。 1. 服務提供者在啟動時,向註冊中心註冊自己提供的服務。

<每日題>題目2:編寫裝飾器,為多個函數加上認證功能(戶賬號和密碼來源於文件)

def bsp 多個 name UNC func print span 賬號   這裏做個最簡單的賬號密碼驗證,主要為了實現裝飾器同時對多個函數起作用 1 FLAG = False #加一個變量防止多次登錄驗證 2 def wrapper(f): 3

普通話說微服務系列() 單體應用到微服務的進化

從工作體驗切入 開始部署應用                    在很久很久以前,開發與部署web應用時,一開始都是很開心地寫完‘整個

dubbo服務器啟動後報錯端口被占

cat 解釋 auto 目錄結構 pan 端口 maven工程 元素 二次 環境:maven工程,ssm框架,tomcat 情景:dubbo的服務註冊方服務器啟動 問題原因:   經過網絡查找,結果是Root WebApplicationContext 啟動了兩次

Python每日題:第4題:Python實現斐波那契數列

這是Python之禪和他朋友們在知識星球的第4題:用Python實現斐波那契數列 斐波那契數列(Fibonacci)最早由印度數學家Gopala提出,而第一個真正研究斐波那契數列的是義大利數學家 Leonardo Fibonacci,斐波那契數列的定義很簡單,用數學函式可表示為: 數列從0

Dubbo 服務除錯管理實用命令

轉自:https://mp.weixin.qq.com/s?__biz=MzU5NTAzNjM0Mw==&mid=2247485628&idx=2&sn=b12f8aaaab4c99db014f18024edbe6d0&chksm=fe795964c90ed07277

PHP版 RabbitMQ小技巧程式碼獲得伺服器上的訊息佇列名

  最近在新浪開發一個用了MQ的URL監控專案,對PHP版的RabbitMQ有一些瞭解。想先吐個槽,就算是今年1月份的某些MQ的教程,很多都是不對的,和我在4月份看到的 官方的Tutorial 都