Dubbo-go 泛化調(diào)用

2022-04-14 17:46 更新

1. Dubbo-go 泛化調(diào)用 Java Server

使用 Triple 協(xié)議 + hessian2 序列化方案

可參考Dubbo-go 3.0 泛化調(diào)用文檔

1.1 Java-Server啟動(dòng)

  1. 傳輸結(jié)構(gòu)定義
package org.apache.dubbo;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
	private String id;

  private String name;

  private int age;

  private Date time = new Date();
}
  1. 接口定義
package org.apache.dubbo;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
//import org.apache.dubbo.rpc.filter.GenericFilter;

public interface UserProvider {
	User GetUser1(String userId);
}

1.2 Go-Client 泛化調(diào)用

此處展示以 API 的形式構(gòu)造泛化接口引用

// 初始化 Reference 配置
refConf := config.NewReferenceConfigBuilder().
  SetInterface("org.apache.dubbo.UserProvider").
  SetRegistryIDs("zk").
  SetProtocol(tripleConst.TRIPLE).
  SetGeneric(true).
  SetSerialization("hessian2").
  Build()

// 構(gòu)造 Root 配置,引入注冊中心模塊
rootConfig := config.NewRootConfigBuilder().
  AddRegistry("zk", config.NewRegistryConfigWithProtocolDefaultPort("zookeeper")).
  Build()

// Reference 配置初始化,因?yàn)樾枰褂米灾行倪M(jìn)行服務(wù)發(fā)現(xiàn),需要傳入經(jīng)過配置的 rootConfig
if err := refConf.Init(rootConfig); err != nil{
  panic(err)
}

// 泛化調(diào)用加載、服務(wù)發(fā)現(xiàn)
refConf.GenericLoad(appName)

time.Sleep(time.Second)

// 發(fā)起泛化調(diào)用
resp, err := refConf.GetRPCService().(*generic.GenericService).Invoke(
  context.TODO(),
  "getUser1",
  []string{"java.lang.String"},
  []hessian.Object{"A003"},
)

if err != nil {
  panic(err)
}
logger.Infof("GetUser1(userId string) res: %+v", resp)

GenericService 的 Invoke 方法包括三個(gè)參數(shù):context.Context, []string, []hessian.Object,

其中第二個(gè)參數(shù)為對應(yīng)參數(shù)的 Java 類名,例如java.lang.String、org.apache.dubbo.User,第三個(gè)參數(shù)為參數(shù)列表,hessian.Object 即為 interface。第二、第三個(gè)參數(shù)應(yīng)與方法簽名一致,按順序?qū)?yīng)。

獲得map結(jié)構(gòu)的返回結(jié)果

INFO    cmd/client.go:89        GetUser1(userId string) res: map[age:48 class:org.apache.dubbo.User id:A003 name:Joe sex:MAN time:2021-10-04 14:03:03.37 +0800 CST]


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號