invoke注入參數調用dubbo接口

最近我們同事寫了一個自動化測試工具,通過maven將系統的jar包下載下來之後,通過反射的方法就可以獲取到該系統對外暴露的接口,通過傳參就可以很輕易的獲取到dubbo接口啦。

這裏有兩個難點(對我來說),1、是如何自動從遠程倉庫下載包,而不是程序內部添加pom文件;2、是如何動態獲取對外暴露的接口。

第一點應該容易解決,我百度一下如何動態更新pom文件。

第二點如何解決:

通常我們配置一個接口,是要在xml配置,要研發告知我們接口在哪裏。比如這樣,配置到xml文件中。

但是作爲一個系統,對用戶來說內部實現是黑盒的。每次調用接口的時候去問開發是不正常的,所以我們可以通過部署信息,知道應用部署在哪臺機器,然後登陸該機器。通過invoke 反射方法獲取到暴露的接口信息。

1、ps -ef | grep "xx"   找到dubbo端口號

面對springboot的動態項目時,用ps是找不到端口的。

1、獲取服務進程pid:ps -ef | grep task-app

2、查找進程監聽的dubbo端口號: lsof -i | grep 17691 | grep LISTEN

20881即爲dubbo 動態端口號

 

2、telnet 10.16.244.42 18010  遠程登陸服務的標準協議和主要方式。提供了在本地計算機完成遠程主機的能力。在本地輸入命令和在遠程計算機中輸入命令效果一樣。

按 ctrl +] 進入 tel命令行,telnet命令行的作用。

這個時候,我們應該按”enter“回車鍵,進入dubbo命令行。然後,ls命令出現暴露的接口。ls xx.xx.xx接口名,出現接口具體的方法。

ls

3、對具體的方法,invoke xx.xx.service.method(參數1,參數2),就會返回結果。

 4、如何面對 invoke xx.xx.service.method(對象1,對象2),此時dubbo invoke調用之後的處理 InvokeTelnetHandler。
發現在校驗參數的時候,會去判斷類型是否一致。當我們傳入json的時候,參數類型是jsonObject,所以我們得添加一個屬性class來指定轉換的對象。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章