一、下載配置thrift
從Thrift官網(wǎng) http://thrift.apache.org/ 下載thrift,然后進(jìn)行安裝。
筆者是windows系統(tǒng),所以直接下載解壓就有一個(gè)thrift的運(yùn)行文件,我把它加入了環(huán)境變量。

運(yùn)行thrift --version,如果能正確顯示版本,證明thrift安裝成功。

二、信息服務(wù)開(kāi)發(fā)
由于信息服務(wù)只是一個(gè)很簡(jiǎn)單的公共服務(wù),為了驗(yàn)證thrift的跨語(yǔ)言特性,我打算用python來(lái)開(kāi)發(fā)信息服務(wù),建立好工程,創(chuàng)建好thrift文件,定義好接口方法

我們寫一個(gè)簡(jiǎn)單的shell腳本來(lái)自動(dòng)化運(yùn)行thrift生成代碼的命令。

只需要運(yùn)行這個(gè)shell腳本就可以自動(dòng)生成代碼了。先簡(jiǎn)單實(shí)現(xiàn)發(fā)送郵件和發(fā)送短信的接口,啟動(dòng)python thrift service。

控制臺(tái)已經(jīng)打印出python thrift service啟動(dòng)輸出。檢查9090端口是否監(jiān)聽(tīng),netstat -na |grep 9090,發(fā)現(xiàn)端口成功監(jiān)聽(tīng)

接下來(lái)補(bǔ)全信息服務(wù)的實(shí)現(xiàn),因?yàn)榘l(fā)送短信是需要收費(fèi)的,所以這里對(duì)它只做一個(gè)簡(jiǎn)單打印,主要是用163實(shí)現(xiàn)發(fā)送郵件功能,這里需要一個(gè)授權(quán)碼,申請(qǐng)一個(gè)163郵箱,然后設(shè)置開(kāi)通授權(quán)碼才可使用。

接著我們創(chuàng)建一個(gè)java api模塊,然后增加shell腳本,生成java api代碼。

接著修改pom文件,加入thrift的依賴。

三、用戶服務(wù)開(kāi)發(fā)
首先創(chuàng)建一個(gè)用戶服務(wù)api的module,然后編寫thrift文件,再編寫腳本生成api代碼。

接著再創(chuàng)建實(shí)現(xiàn)模塊,由于我們是在user-thrift-service里實(shí)現(xiàn)api,所以pom文件中需要引入api模塊。

接著開(kāi)始創(chuàng)建數(shù)據(jù)庫(kù),我是直接用docker運(yùn)行mysql的,在apps文件夾里面有redis,mysql等等中間件。用一個(gè)啟動(dòng)腳本,掛載本地配置文件和數(shù)據(jù)到mysql容器中,然后開(kāi)始創(chuàng)建數(shù)據(jù)庫(kù)。

為了方便,我是直接用navicat創(chuàng)建數(shù)據(jù)表。

接著開(kāi)始寫mapper代碼,我這里采用的是mybatis。

接著要開(kāi)始構(gòu)建thrift server,這里需要和python的api保持一致,選擇幀傳輸協(xié)議,用非阻塞io,然后啟動(dòng)tsocker server,用spring boot啟動(dòng)項(xiàng)目,項(xiàng)目啟動(dòng)成功。

四、用戶EdgeService開(kāi)發(fā)
首先建立edge-service工程,再把依賴引入,因?yàn)閑dge-service對(duì)外是提供rest接口的,所以在pom里面需要引入spring-boot-starter-web.接著創(chuàng)建provider類,獲取client,這樣我們就可以用client調(diào)用user-service提供的服務(wù)了。

接著開(kāi)始寫controller,對(duì)外提供http接口,首先要驗(yàn)證用戶名和密碼,密碼是md5加密的,接著生成token,token用redis存儲(chǔ),接著返回token。

啟動(dòng)user-thrift-service和user-edge-service,接著啟動(dòng)postman開(kāi)始請(qǐng)求。

測(cè)試成功!可以看到thrift生成的api是成功的,user-edge-service成功的請(qǐng)求到了user-thrift-service提供的data查詢接口。
具體代碼請(qǐng)到我的github查看:https://github.com/jauhwan/micro-service