有没有办法通过thrift将未在thrift文件中定义的Java对象作为结构从一个java应用程序发送到另一个java应用程序。 问题是我们正在使用一个拥有自己的域模型的外部库,我们需要通过thrift发送这些模型,那么有没有这样做的技术呢?
我们非常感谢任何建议。
更新#1
下面的答案正确解释了可能的解决方案,目前我们正在考虑创建一个镜像外部库类的自己的域模型(它足够小以便付出这样的努力)
答案 0 :(得分:2)
这是一个简单的三步过程:
ByteBuffer
或类似binary
服务可以像
一样简单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)
}