国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

eggjs和dubbo結合,egg-dubbo-plugin的開發

hoohack / 3496人閱讀

摘要:由于中的都是服務,所以需要一個插件來調用服務。可以看到,只是一個封裝,真正對工作委托給了也就是。在里,我們進行了方法的綁定,這樣在里,就可以像調用方法一樣,調用服務了。完成后,補齊單元測試,發布到庫里就可。

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

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

然后安裝依賴:

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

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

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只是一個封裝,真正對工作委托給了 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里,我們進行了dubbo方法的綁定,這樣在controller里,就可以像調用ctx.curl方法一樣,調用dubbo服務了。
這里要注意一個問題:dubbo服務可能會超時,所以我們這里需要對超時進行了處理,通過Promise.race,讓dubbo服務的調用和我們的timeout進行競爭,如果超時,直接拋出錯誤。注意!!!不要catch,egg會統一對錯誤進行處理,所以我們在底層不要catch錯誤,直接把錯誤往上拋出就好!

最后,看一下使用這個插件時的配置,在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對比下就能看出,我們只是把配置移動到dubboAgent這個對象而已。

完成后,補齊單元測試,發布到npm庫里就可。
git地址:https://github.com/Daniel1989...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107240.html

相關文章

  • Eggjs小試

    摘要:項目都很小,但為了進一步了解,特意選擇了作為框架基礎開發后端服務。能將請求限制在同源網站,即只有擁有專有令牌的網站發送請求才會正確響應。項目生產靜默部署,啟動使用,停止使用。不足工具函數的訪問需要自己手動添加擴展另沒有寫測試,希望下次補上。 前言 這段時間,用Eggjs作為后端服務框架開發了幾個項目。項目都很小,但為了進一步了解Eggjs,特意選擇了Eggjs作為框架基礎開發后端服務。...

    waltr 評論0 收藏0
  • Eggjs下Restful API實現

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

    linkin 評論0 收藏0
  • Service Mesh 時代,Dubbo 架構該怎么跟進?

    摘要:原文鏈接時代,架構該怎么跟進,來自于微信公眾號次靈均閣作為核心開發者,請先簡單介紹下自己答大家好,我是小馬哥,一名學習當爸爸的父親,勸退師,項目架構師,編程思想的作者。因此,需求的來源不再已阿里為絕對主導,社區共建和共制的發展模式已成事實。 原文鏈接:Service Mesh 時代,Dubbo 架構該怎么跟進?,來自于微信公眾號:次靈均閣 作為 Duboo 核心開發者,請先簡單介紹下...

    robin 評論0 收藏0
  • Service Mesh 時代,Dubbo 架構該怎么跟進?

    摘要:原文鏈接時代,架構該怎么跟進,來自于微信公眾號次靈均閣作為核心開發者,請先簡單介紹下自己答大家好,我是小馬哥,一名學習當爸爸的父親,勸退師,項目架構師,編程思想的作者。因此,需求的來源不再已阿里為絕對主導,社區共建和共制的發展模式已成事實。 原文鏈接:Service Mesh 時代,Dubbo 架構該怎么跟進?,來自于微信公眾號:次靈均閣 作為 Duboo 核心開發者,請先簡單介紹下...

    李文鵬 評論0 收藏0
  • 網關實現灰度發布

    摘要:就是一種灰度發布方式,讓一部分用戶繼續用,一部分用戶開始用,如果用戶對沒有什么反對意見,那么逐步擴大范圍,把所有用戶都遷移到上面來。灰度發布可以保證整體系統的穩定,在初始灰度的時候就可以發現調整問題,以保證其影響度。 一、背景互聯網產品開發有個非常特別的地方,就是不停的升級,升級,再升級。采用敏捷開發的方式,基本上保持每周或者每兩周一次的發布頻率,系統升級總是伴隨著各種風險,新舊版本兼...

    stormjun 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<