不知道你是否在工作中有遇到過類似情況:
- dubbo接口調試復雜,需要通過telnet命令或者通過consumer調用來觸發。
- telnet語句參數格式復雜,每次編寫都要小心謹慎,一旦出錯又需重來。
- 復雜對象參數傳參調用接口復雜,編寫JAVA api調用接口時間成本較高。
上述這些坑我在工作中都有遇見過,發現大部分耗時都會卡在調用dubbo服務做自測的階段,所以后來花費了寫業余時間寫了一款高效的dubbo測試工具開源給大家使用。
這款工具目前已在實際工作中應用半年多,基本功能已經成熟,后續依舊會進行版本維護。
相關的代碼地址為:
https://gitee.com/IdeaHome_admin/dubbo-proxy-tools
ps: 如果大家喜歡,希望能給出一顆寶貴的star
關于如何部署本工具
下載了gitlab的代碼之后,你會看到有兩個文件包:iubbo-proxy和iubbo-proxy-web,它們分別正好對應了后端代碼和前端代碼。
前端代碼的部署
前端采用非常簡單的vue技術,只需要將文件部署到一臺Nginx上邊即可運作。前端的默認訪問頁面是test-dubbo-web.html。
但是有兩個小點需要改動下js配置
constants.js
這份文件里面編寫了對應的請求server地址,這塊是對應了后端服務的url。
由于請求dubbo接口需要通過zk注冊中心來拉去服務名列表,所以需要在iubbo.x.js里面的commonzk中做配置:
這里的host是一個別稱,相當于一個key用于供前端展示,實際上傳輸給后端的是用ip這個值。
后端代碼的部署
后端工程采用了springboot框架技術,核心的配置放在了Application.properties里面:
server.port=7089
application.invoker.name=iubbo-invoker-proxy
spring.datasource.druid.password=
spring.datasource.druid.username=
spring.datasource.druid.url=jdbc:MySQL://127.0.0.1:3306/iubbox-proxy
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
mybatis-plus.configuration.map-underscore-to-camel-case=true
spring.redis.port=6379
spring.redis.host= 127.0.0.1
然后倒入建表的sql:
CREATE TABLE `t_dubbo_invoke_req_record` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL COMMENT '用戶id',
`arg_json` varchar(2500) COLLATE utf8_bin DEFAULT NULL COMMENT 'dubbo請求參數',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `t_user` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`username` varchar(60) COLLATE utf8_bin DEFAULT NULL,
`password` varchar(30) COLLATE utf8_bin DEFAULT NULL,
`createTime` datetime DEFAULT CURRENT_TIMESTAMP,
`updateTime` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
- t_user 用于記錄相關的用戶賬號,方便于保存用戶賬號信息。
- t_dubbo_invoke_req_record 用于記錄請求dubbo接口的用例信息。
最后就是啟動入口類
org.iubbo.proxy.DubboInvokerApplication
啟動成功截圖
關于本工具的使用教程
本工具區分了已登錄賬號和未登錄賬號兩類角色,已登錄賬號的使用者可以對請求的用例進行保存,方便下一次提取信息,未登錄賬號雖然沒有保存用例的功能,但是不影響其使用本工具進行測試。
首頁截圖:
1.指定zk地址
在測試dubbo接口之前,我們通常都會去拉取一遍zk上邊的service地址,操作如下圖:先在文本框點擊,輸入和js配置有關的字母或數字會有模糊匹配的選項供各位選擇:
選中了zk地址之后,再去點擊拉取zk地址按鈕(以前有同事剛接觸這個工具的時候,這里被繞蒙了~~)
拉取zk地址的時候,后端會根據文章上邊提到的js配置里面的ip值去拉取,拉取成功會有相關提示:
接下來便是篩選dubbo服務地址的功能,在拉取zk地址下方有一個下拉框,這里面此時應當會被注入zk上所有dubbo服務列表的名稱。
選擇對于的service名稱,然后在右邊的“請輸入名稱”文本框中輸入該接口對應的方法名稱(一定要名稱對應)
這里以調用MsgService的sendMsg方法為例:
然后配置相關的參數和名稱
選擇對應參數類型和值:
最后發起請求:
在基礎參數配置項的旁邊,還有一個模塊是專門配置consumer端的額外內容,這些參數項都是在平時工作中可能會應用到的場景,需要的時候可以進行配置。這里面也配備了工作中非常常用的直連選項。
我個人最喜歡使用的還是直連功能,因為在開發過程中,經常需要直連機器做自測:
假如說希望保存自己曾經發送過的dubbo測試用例,那么你只需先進行登錄賬號,賬號直接往t_user表里面寫入一條數據即可:
在首頁的右上方有個進入登錄頁面按鈕:
點擊登錄
如何保存請求用例:
保存用例這里有些小瑕疵,需要用戶手動刷新下頁面才能顯示保存的用例信息:
點擊選用參數,則頁面又會重新回顯之前使用過的請求信息。
特殊參數請求
該工具支持多種開發中常見的參數格式調用,目前支持常規參數
ps:注意這里的參數格式需要和dubbo方法里面的參數格式按照相同順序相同類型做映射,否則后端程序會返回找不到對應方法
Java的常用基本類型數據:boolean,short,int,long,double,char,float
Java中常用的包裝類數據:
java.lang.String,
java.lang.Integer,
java.lang.Object,
java.util.List,
java.lang.Class,
java.lang.Long,
java.lang.Boolean,
java.util.Map,
java.util.Date,
java.lang.Float,
java.lang.Double
對于簡單的數據類型傳遞
多參數,中英文混合傳遞
List類型參數的傳遞
Class類型的參數傳遞
Map類型的參數傳遞
Date類型的參數傳遞
自定義對象參數傳參
如果在實際應用中遇到了這種場景,需要調用以下的接口,那么這個使用就需要使用自定義參數了:
圖片
復雜類型自定義參數傳遞
假設遇到了List類型參數,而且傳輸的List里面包含有自定義對象,例如下邊這種類型:
List<UserDTO> testUserDtoList(List<UserDTO> userDTOList,Class clazz);
那么此時的傳參案例可以像下邊這樣來寫:
易錯點歸納
注意請求的參數順序要和方法對應的參數順序一致,假設服務的方法定義如下:
<T> List<T> getList(List<Long> var1, Class<T> var2);
那么傳入的參數就必須先填List參數,再寫Class參數。
- 正確示例:(先寫了List參數,再寫Class參數)
- 錯誤示例:(先寫了Class參數,再寫List參數)