成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

eggjs和dubbo結(jié)合,egg-dubbo-plugin的開發(fā)

hoohack / 3504人閱讀

摘要:由于中的都是服務(wù),所以需要一個(gè)插件來(lái)調(diào)用服務(wù)??梢钥吹?,只是一個(gè)封裝,真正對(duì)工作委托給了也就是。在里,我們進(jìn)行了方法的綁定,這樣在里,就可以像調(diào)用方法一樣,調(diào)用服務(wù)了。完成后,補(bǔ)齊單元測(cè)試,發(fā)布到庫(kù)里就可。

由于MVC中的M都是dubbo服務(wù),所以需要一個(gè)插件來(lái)調(diào)用dubbo服務(wù)。個(gè)人推薦這個(gè)包node-zookeeper-dubbo 我們所需要的只是把他封裝成一個(gè)插件,使用方式則類似于httpClient.

首先執(zhí)行egg-init --type=plugin egg-dubbo-plugin
這樣一個(gè)插件的大體框架就構(gòu)造完成了(egg真的很方便,是不是?)

然后安裝依賴:

npm i --save js-to-java
npm i --save node-zookeeper-dubbo

完成這些后,我們就開始開發(fā)工作了,主要內(nèi)容就是app.js和app/extend/context.js這兩個(gè)文件中。

app.js:

const nzd = require("node-zookeeper-dubbo");

module.exports = app => {
    class DubboClient {
        constructor() {
            let config = app.config.dubboclient;
            config.java = require("js-to-java")
            this.dubboAgent=new nzd(config.dubboAgent);
        }

        request(className, method, javaParams) {
            try {
                return  this.dubboAgent[className][method](...javaParams);
            }catch(e){
                app.coreLogger.error("[egg:dubboAgent] call dubbo error");
                app.coreLogger.error(e);
            }
        }

    }

    app.dubboClinent = new DubboClient();
};

可以看到,DubboClient只是一個(gè)封裝,真正對(duì)工作委托給了 dubboAgent,也就是nzd。

context.js

module.exports = {
    dubbo(className, method, ...javaParams) {
        const timeout =  this.app.dubboClinent.dubboAgent.dependencies[className].dubboTimeout || this.app.dubboClinent.dubboTimeout || 30000;
        return Promise.race([
            this.app.dubboClinent.request(className, method, javaParams),
            new Promise((_, reject) => setTimeout(() => reject(new Error("timeout")), timeout))
        ]);
    },
};

在context.js里,我們進(jìn)行了dubbo方法的綁定,這樣在controller里,就可以像調(diào)用ctx.curl方法一樣,調(diào)用dubbo服務(wù)了。
這里要注意一個(gè)問(wèn)題:dubbo服務(wù)可能會(huì)超時(shí),所以我們這里需要對(duì)超時(shí)進(jìn)行了處理,通過(guò)Promise.race,讓dubbo服務(wù)的調(diào)用和我們的timeout進(jìn)行競(jìng)爭(zhēng),如果超時(shí),直接拋出錯(cuò)誤。注意?。?!不要catch,egg會(huì)統(tǒng)一對(duì)錯(cuò)誤進(jìn)行處理,所以我們?cè)诘讓硬灰猚atch錯(cuò)誤,直接把錯(cuò)誤往上拋出就好!

最后,看一下使用這個(gè)插件時(shí)的配置,在config.default.js中:

exports.dubboclient = {
    dubboAgent: {
        application:{name:"demo-provider"},
        register:"localhost:2181",
        dubboVer:"2.5.4-SNAPSHOT",
        root:"dubbo",
        dependencies:{
            Foo:{
                interface:"com.alibaba.dubbo.demo.provider.DemoService",
            },
        }
    }
}

和node-zookeeper-dubbo對(duì)比下就能看出,我們只是把配置移動(dòng)到dubboAgent這個(gè)對(duì)象而已。

完成后,補(bǔ)齊單元測(cè)試,發(fā)布到npm庫(kù)里就可。
git地址:https://github.com/Daniel1989...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107240.html

相關(guān)文章

  • Eggjs小試

    摘要:項(xiàng)目都很小,但為了進(jìn)一步了解,特意選擇了作為框架基礎(chǔ)開發(fā)后端服務(wù)。能將請(qǐng)求限制在同源網(wǎng)站,即只有擁有專有令牌的網(wǎng)站發(fā)送請(qǐng)求才會(huì)正確響應(yīng)。項(xiàng)目生產(chǎn)靜默部署,啟動(dòng)使用,停止使用。不足工具函數(shù)的訪問(wèn)需要自己手動(dòng)添加擴(kuò)展另沒(méi)有寫測(cè)試,希望下次補(bǔ)上。 前言 這段時(shí)間,用Eggjs作為后端服務(wù)框架開發(fā)了幾個(gè)項(xiàng)目。項(xiàng)目都很小,但為了進(jìn)一步了解Eggjs,特意選擇了Eggjs作為框架基礎(chǔ)開發(fā)后端服務(wù)。...

    waltr 評(píng)論0 收藏0
  • Eggjs下Restful API實(shí)現(xiàn)

    摘要:今天就簡(jiǎn)要說(shuō)說(shuō)下的實(shí)現(xiàn)。主要的原因是的文檔寫的不太清楚,方便新人快速上手。導(dǎo)致我們一目十行去掃文檔的時(shí)候,有時(shí)總會(huì)覺(jué)得有些莫名,的實(shí)現(xiàn)就是其中之一。其實(shí)這和我本身對(duì)的了解不深入有關(guān),但是也沒(méi)有文檔和我說(shuō)實(shí)現(xiàn)啊。 這兩天真的是宅的骨頭都發(fā)霉了,春困秋乏夏打盹,也是醉了。今天就簡(jiǎn)要說(shuō)說(shuō)eggjs下Restful API的實(shí)現(xiàn)。主要的原因是egg的文檔寫的不太清楚,方便新人快速上手。話說(shuō)eg...

    linkin 評(píng)論0 收藏0
  • Service Mesh 時(shí)代,Dubbo 架構(gòu)該怎么跟進(jìn)?

    摘要:原文鏈接時(shí)代,架構(gòu)該怎么跟進(jìn),來(lái)自于微信公眾號(hào)次靈均閣作為核心開發(fā)者,請(qǐng)先簡(jiǎn)單介紹下自己答大家好,我是小馬哥,一名學(xué)習(xí)當(dāng)爸爸的父親,勸退師,項(xiàng)目架構(gòu)師,編程思想的作者。因此,需求的來(lái)源不再已阿里為絕對(duì)主導(dǎo),社區(qū)共建和共制的發(fā)展模式已成事實(shí)。 原文鏈接:Service Mesh 時(shí)代,Dubbo 架構(gòu)該怎么跟進(jìn)?,來(lái)自于微信公眾號(hào):次靈均閣 作為 Duboo 核心開發(fā)者,請(qǐng)先簡(jiǎn)單介紹下...

    robin 評(píng)論0 收藏0
  • Service Mesh 時(shí)代,Dubbo 架構(gòu)該怎么跟進(jìn)?

    摘要:原文鏈接時(shí)代,架構(gòu)該怎么跟進(jìn),來(lái)自于微信公眾號(hào)次靈均閣作為核心開發(fā)者,請(qǐng)先簡(jiǎn)單介紹下自己答大家好,我是小馬哥,一名學(xué)習(xí)當(dāng)爸爸的父親,勸退師,項(xiàng)目架構(gòu)師,編程思想的作者。因此,需求的來(lái)源不再已阿里為絕對(duì)主導(dǎo),社區(qū)共建和共制的發(fā)展模式已成事實(shí)。 原文鏈接:Service Mesh 時(shí)代,Dubbo 架構(gòu)該怎么跟進(jìn)?,來(lái)自于微信公眾號(hào):次靈均閣 作為 Duboo 核心開發(fā)者,請(qǐng)先簡(jiǎn)單介紹下...

    李文鵬 評(píng)論0 收藏0
  • 網(wǎng)關(guān)實(shí)現(xiàn)灰度發(fā)布

    摘要:就是一種灰度發(fā)布方式,讓一部分用戶繼續(xù)用,一部分用戶開始用,如果用戶對(duì)沒(méi)有什么反對(duì)意見,那么逐步擴(kuò)大范圍,把所有用戶都遷移到上面來(lái)?;叶劝l(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時(shí)候就可以發(fā)現(xiàn)調(diào)整問(wèn)題,以保證其影響度。 一、背景互聯(lián)網(wǎng)產(chǎn)品開發(fā)有個(gè)非常特別的地方,就是不停的升級(jí),升級(jí),再升級(jí)。采用敏捷開發(fā)的方式,基本上保持每周或者每?jī)芍芤淮蔚陌l(fā)布頻率,系統(tǒng)升級(jí)總是伴隨著各種風(fēng)險(xiǎn),新舊版本兼...

    stormjun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<