上一章, 我們講了服務(wù)的注冊(cè),這一章我們來(lái)說(shuō)下服務(wù)的發(fā)現(xiàn)。
服務(wù)的發(fā)現(xiàn)其實(shí)就是根據(jù)服務(wù)名找出服務(wù)地址。
個(gè)人覺得這個(gè)分兩種情況。
1、后端,我們可以通過(guò)一個(gè)client來(lái)獲取到服務(wù)的地址和端口,然后將請(qǐng)求直接發(fā)送過(guò)去,如client.getinstatnce().helloservice(reqest),這樣來(lái)調(diào)用。
2、前端,前端也有兩種方式:一種是我們通過(guò)后端代碼來(lái)訪問(wèn)后端服務(wù),另外一種是直接ajax調(diào)用目標(biāo)服務(wù)。個(gè)人覺得后一種方法更好。
下面我們講前端用node.js如何實(shí)現(xiàn)前端的服務(wù)發(fā)現(xiàn),這種方式下,前端只需要用ajax調(diào)用node.js的服務(wù)器,并設(shè)置一個(gè)http請(qǐng)求頭,傳入servicename即可,由node.js做網(wǎng)關(guān),進(jìn)行服務(wù)的發(fā)現(xiàn)以及請(qǐng)求的轉(zhuǎn)發(fā)。
環(huán)境準(zhǔn)備
node.js教程如下:
http://www.runoob.com/nodejs/nodejs-tutorial.html
安裝好node.js的server。
idea下載一個(gè)node.js的插件。
下載一個(gè)postman,方便我們測(cè)試。
然后新建一個(gè)node.js的項(xiàng)目,下載三個(gè)項(xiàng)目,express,http-proxy,node-zookeeper-client
具體實(shí)現(xiàn)
這個(gè)網(wǎng)關(guān)功能很簡(jiǎn)單:
首先, 通過(guò)req.get('Service-Name');拿到服務(wù)的名字。
然后,根據(jù)服務(wù)名字通過(guò)zookeeper獲取到服務(wù)地址。
最后,再對(duì)請(qǐng)求進(jìn)行反向代理,用http-proxy將請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)地址。

代碼如下:



結(jié)果測(cè)試
先在idea下run這個(gè)項(xiàng)目

然后用postman, 試著調(diào)一下http://localhost:1234//hello。理論上,我們應(yīng)該看到Hello的返回。

跟我們預(yù)期的結(jié)果一樣。
然后我們?cè)賮?lái)看后臺(tái)消息。

可以看到,一共訪問(wèn)了四次,8080命中了1次,8082命中了3次。達(dá)到了我們的測(cè)試效果。
下一章,將會(huì)實(shí)現(xiàn)java后臺(tái)代碼的服務(wù)發(fā)現(xiàn)。