gpt4 book ai didi

java - 如何发送未在 Thrift 中定义结构的 Java 对象

转载 作者:行者123 更新时间:2023-11-30 03:24:29 24 4
gpt4 key购买 nike

是否有一种方法可以通过 thrift 将未在 thrift 文件中定义的 Java 对象作为结构从一个 java 应用程序发送到另一个 java 应用程序。问题是我们使用的外部库有自己的域模型,我们需要通过 thrift 发送这些模型,那么有什么技术可以做到这一点吗?

热烈欢迎任何建议。

更新#1

下面的答案正确解释了可能的解决方案,目前我们正在考虑创建自己的域模型来镜像外部库类(它足够小,可以付出这样的努力)

最佳答案

将序列化实体交换为二进制数据

这是一个简单的三步过程:

  1. 序列化数据,例如到 ByteBuffer 或类似的
  2. 通过 Thrift 接口(interface)以二进制的方式发送该数据
  3. 将接收到的字节反序列化为 Java 实体

服务可以很简单

service MyCoolService {
binary Foobar( 1: binary javaBytes)
}

警告一句话

值得一提的是,这打破了 Thrift 所代表的跨语言系统的整体理念。您的二进制数据只能被 Java 程序理解。你被警告了。但另一方面,如果您的用例是这样的,API 仅在内部使用,这方面不会成为问题,这是一个合法的解决方案。

替代解决方案

另一个解决方案可能是使用 Thrift IDL 镜像域模型。当领域模型很小和/或不经常改变时,这可能是一个解决方案。好处是您获得了交叉互操作性,但您付出了额外的复杂性和一点性能的代价(在某些地方,数据必须以某种方式从一种模型转换为另一种模型)。

但是,如果领域模型具有一定的复杂性,这就会变得很麻烦。

组合解决方案

当然,您也可以结合使用这两个选项,例如通过MultiplexTransport :

// the efficient, but Java-only way outlined at the beginning
service MyCoolJavaService {
binary Foo( 1: binary javaBytes)
}

// miror-model solution

struct EntityOne { ... whatever you need ... }
struct OtherEntity { ... whatever you need ... }
struct ThirdEntity { ... whatever you need ... }

service MyCoolModelService {
EntityOne Foo( 1: ThirdEntity foo, 2: OtherEntity bar)
}

关于java - 如何发送未在 Thrift 中定义结构的 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30600040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com