泛化调用

1. Dubbogo 泛化调用 Java Server

使用 Triple 协议 + hessian2 序列化方案

可参考Dubbogo 3.0 泛化调用文档

1.1 Java-Server启动

  1. 传输结构定义
  1. package org.apache.dubbo;
  2. import java.io.Serializable;
  3. import java.util.Date;
  4. public class User implements Serializable {
  5. private String id;
  6. private String name;
  7. private int age;
  8. private Date time = new Date();
  9. }
  1. 接口定义
  1. package org.apache.dubbo;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Map;
  5. //import org.apache.dubbo.rpc.filter.GenericFilter;
  6. public interface UserProvider {
  7. User GetUser1(String userId);
  8. }

1.2 Go-Client 泛化调用

此处展示以 API 的形式构造泛化接口引用

  1. // 初始化 Reference 配置
  2. refConf := config.NewReferenceConfigBuilder().
  3. SetInterface("org.apache.dubbo.UserProvider").
  4. SetRegistryIDs("zk").
  5. SetProtocol(tripleConst.TRIPLE).
  6. SetGeneric(true).
  7. SetSerialization("hessian2").
  8. Build()
  9. // 构造 Root 配置,引入注册中心模块
  10. rootConfig := config.NewRootConfigBuilder().
  11. AddRegistry("zk", config.NewRegistryConfigWithProtocolDefaultPort("zookeeper")).
  12. Build()
  13. // Reference 配置初始化,因为需要使用注册中心进行服务发现,需要传入经过配置的 rootConfig
  14. if err := refConf.Init(rootConfig); err != nil{
  15. panic(err)
  16. }
  17. // 泛化调用加载、服务发现
  18. refConf.GenericLoad(appName)
  19. time.Sleep(time.Second)
  20. // 发起泛化调用
  21. resp, err := refConf.GetRPCService().(*generic.GenericService).Invoke(
  22. context.TODO(),
  23. "getUser1",
  24. []string{"java.lang.String"},
  25. []hessian.Object{"A003"},
  26. )
  27. if err != nil {
  28. panic(err)
  29. }
  30. logger.Infof("GetUser1(userId string) res: %+v", resp)

GenericService 的 Invoke 方法包括三个参数:context.Context, []string, []hessian.Object,

其中第二个参数为对应参数的 Java 类名,例如java.lang.String、org.apache.dubbo.User,第三个参数为参数列表,hessian.Object 即为 interface。第二、第三个参数应与方法签名一致,按顺序对应。

获得map结构的返回结果

  1. 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]

最后修改 December 16, 2022: Fix check (#1736) (97972c1)