Dubbo3 實(shí)現(xiàn)泛化調(diào)用

2022-03-31 11:14 更新

實(shí)現(xiàn)一個(gè)通用的遠(yuǎn)程服務(wù) Mock 框架,可通過(guò)實(shí)現(xiàn) GenericService 接口處理所有服務(wù)請(qǐng)求

泛接口實(shí)現(xiàn)方式主要用于服務(wù)器端沒(méi)有 API 接口及模型類(lèi)元的情況,參數(shù)及返回值中的所有 POJO 均用 Map 表示,通常用于框架集成,比如:實(shí)現(xiàn)一個(gè)通用的遠(yuǎn)程服務(wù) Mock 框架,可通過(guò)實(shí)現(xiàn) GenericService 接口處理所有服務(wù)請(qǐng)求。

在 Java 代碼中實(shí)現(xiàn) ?GenericService ?接口:

package com.foo;
public class MyGenericService implements GenericService {
 
    public Object $invoke(String methodName, String[] parameterTypes, Object[] args) throws GenericException {
        if ("sayHello".equals(methodName)) {
            return "Welcome " + args[0];
        }
    }
}

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

在 Spring 配置申明服務(wù)的實(shí)現(xiàn):

<bean id="genericService" class="com.foo.MyGenericService" />
<dubbo:service interface="com.foo.BarService" ref="genericService" />

通過(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();


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)