欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何通過(guò)API方式使用dubbo泛化調(diào)用

這篇文章主要介紹“如何通過(guò)API方式使用dubbo泛化調(diào)用”,在日常操作中,相信很多人在如何通過(guò)API方式使用dubbo泛化調(diào)用問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何通過(guò)API方式使用dubbo泛化調(diào)用”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了巴州免費(fèi)建站歡迎大家使用!

    泛化是啥?

    官網(wǎng)解釋?zhuān)悍夯涌谡{(diào)用方式主要用于客戶(hù)端沒(méi)有 API 接口及模型類(lèi)元的情況,參數(shù)及返回值中的所有 POJO 均用 Map 表示,通常用于框架集成,比如:實(shí)現(xiàn)一個(gè)通用的服務(wù)測(cè)試框架,可通過(guò) GenericService 調(diào)用所有服務(wù)實(shí)現(xiàn)。

我跑去問(wèn)組長(zhǎng),他們那天說(shuō)的泛化是啥?我們什么場(chǎng)景要用???

泛化就是你不知道你不關(guān)心下層實(shí)現(xiàn),只需要約定接口及參數(shù),實(shí)現(xiàn)由下層實(shí)現(xiàn),但是這樣一來(lái)擴(kuò)展性和可用性極低,不如你約定一個(gè)接口,提供方注冊(cè)到ZK上,消費(fèi)方去ZK去拉,或者干脆提供個(gè)jar包,然后通過(guò)普通的注冊(cè)去調(diào)用就可以。

至于場(chǎng)景是因?yàn)榕R時(shí)接入的第三方數(shù)據(jù)服務(wù),不能直接調(diào)用,我們中間提供了接口,實(shí)現(xiàn)是他們實(shí)現(xiàn)的。

通過(guò) Spring 使用泛化調(diào)用

在 Spring 配置申明 generic="true"

<dubbo:reference id="barService" interface="com.foo.BarService" generic="true" />

在 Java 代碼獲取 barService 并開(kāi)始泛化調(diào)用:

GenericService barService = (GenericService) applicationContext.getBean("barService");
Object result = barService.$invoke("sayHello", new String[] { "java.lang.String" }, new Object[]

通過(guò) API 方式使用泛化調(diào)用

import org.apache.dubbo.rpc.service.GenericService;
...

// 引用遠(yuǎn)程服務(wù)
// 該實(shí)例很重量,里面封裝了所有與注冊(cè)中心及服務(wù)提供方連接,請(qǐng)緩存
ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
// 弱類(lèi)型接口名
reference.setInterface("com.xxx.XxxService");
reference.setVersion("1.0.0");
// 聲明為泛化接口
reference.setGeneric(true);

// 用org.apache.dubbo.rpc.service.GenericService可以替代所有接口引用
GenericService genericService = reference.get();

// 基本類(lèi)型以及Date,List,Map等不需要轉(zhuǎn)換,直接調(diào)用
Object result = genericService.$invoke("sayHello", new String[] {"java.lang.String"}, new Object[] {"world"});

// 用Map表示POJO參數(shù),如果返回值為POJO也將自動(dòng)轉(zhuǎn)成Map
Map<String, Object> person = new HashMap<String, Object>();
person.put("name", "xxx");
person.put("password", "yyy");
// 如果返回POJO將自動(dòng)轉(zhuǎn)成Map
Object result = genericService.$invoke("findPerson", new String[]
{"com.xxx.Person"}, new Object[]{person});

...

泛化的實(shí)現(xiàn)

通過(guò) API 方式暴露泛化實(shí)現(xiàn)

...
// 用org.apache.dubbo.rpc.service.GenericService可以替代所有接口實(shí)現(xiàn)
GenericService xxxService = new XxxGenericService();

// 該實(shí)例很重量,里面封裝了所有與注冊(cè)中心及服務(wù)提供方連接,請(qǐng)緩存
ServiceConfig<GenericService> service = new ServiceConfig<GenericService>();
// 弱類(lèi)型接口名
service.setInterface("com.xxx.XxxService");
service.setVersion("1.0.0");
// 指向一個(gè)通用服務(wù)實(shí)現(xiàn)
service.setRef(xxxService);

// 暴露及注冊(cè)服務(wù)
service.export();

注冊(cè)到ZK實(shí)現(xiàn)

public static void main(String[] args) {        ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();        // 當(dāng)前dubbo consumer的application配置,不設(shè)置會(huì)直接拋異常        ApplicationConfig applicationConfig = new ApplicationConfig();        applicationConfig.setName("xxx_test_service");        // 注冊(cè)中心配置        RegistryConfig registryConfig = new RegistryConfig();        // 注冊(cè)中心這里需要配置上注冊(cè)中心協(xié)議,例如下面的zookeeper        registryConfig.setAddress("zookeeper://127.0.0.1:2181");        registryConfig.setGroup("test_group");        reference.setApplication(applicationConfig);        reference.setRegistry(registryConfig);        // 設(shè)置調(diào)用的reference屬性,下面只設(shè)置了協(xié)議、接口名、版本、超時(shí)時(shí)間        reference.setProtocol("dubbo");        //約定接口        reference.setInterface("com.xxx.test.TestService");        reference.setVersion("1.0.0");        reference.setTimeout(1000);        // 聲明為泛化接口        reference.setGeneric(true);        // GenericService可以接住所有的實(shí)現(xiàn)        GenericService genericService = reference.get();        // 構(gòu)造復(fù)雜參數(shù),下面的示例中,頭兩個(gè)參數(shù)為string類(lèi)型,后一個(gè)是一個(gè)復(fù)雜類(lèi)型,但都可以通過(guò)map構(gòu)造。        Map<String, Object> param = new HashMap<>();        param.put("test1", "a");        param.put("test2", "b");        Map<String,Object> thirdParam = new HashMap<>();        thirdParam.put("class","java.util.Map");        thirdParam.put("subParam1","c");        thirdParam.put("subParam2","d");        param.put("test3",thirdParam);        Object result = genericService.$invoke("myMethod", new String[]{"java.lang.String", "java.lang.String", "com.xxxtest.MyParam"}, new Object[]{"123", "ddd",param});        System.out.println(JSON.toJSONString(result));    }

到此,關(guān)于“如何通過(guò)API方式使用dubbo泛化調(diào)用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

網(wǎng)站名稱(chēng):如何通過(guò)API方式使用dubbo泛化調(diào)用
當(dāng)前網(wǎng)址:http://aaarwkj.com/article2/gjgjic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、品牌網(wǎng)站制作、做網(wǎng)站、網(wǎng)站維護(hù)、動(dòng)態(tài)網(wǎng)站響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
色综合天天综合天天更新| 日韩亚洲精品99综合观看| 日本在线观看精品综合| 成人免费av在线网址| 青草草在线观看视频| 亚洲综合一区国产精品| 亚洲综合av一区二区| 中文字幕人妻熟女在线| 国产亚洲欧美精品在线观看| 国产丝袜肉丝在线播放| 久久国产精品av在线观看| 久久精品国产一区二区| 欧美日韩亚洲精品瑜伽裤| 91欧美精品午夜性色福利| 国产美女自拍视频一区| 区二区三区毛片乱码免费| 午夜最新福利在线视频| 欧美亚洲伊人久久综合| 亚洲天堂成人综合在线| 亚洲福利视频在线观看免费| 欧美日韩亚洲激情一区| 精品人妻一区二区三区乱码| 在线国产一区二区不卡| 欧美护士激情第一欧美精品| 亚洲av毛片一区二区三区网| 日本理论高清在线观看| 欧美日韩精品成人大片| 亚洲综合色日本日b网| 人妻免费精品久久一区| 中文字幕亚洲精品乱码在线| 久久av免费一区二区观看| 99热这里只有精品中文| 成人免费毛片1000部| 欧美日韩精品人妻中文| 国产性做爰片免费视频| 欧美日韩另类中文字幕| 97在线观看视频免费| 国产亚洲精品久久久9| 国产一区二区三区精品女同| 日韩有码在线中文字幕| 亚洲一区精品中文字幕|