【问题标题】:What is the best way to interoperably serialize a message?可互操作地序列化消息的最佳方式是什么?
【发布时间】:2010-06-12 08:42:01
【问题描述】:

我正在考虑对spring-integration 的消息序列化支持。这对于实现guaranteed delivery 的各种线路级传输非常有用,而且还允许与其他消息传递系统(例如通过AMQP)进行互操作。

出现的基本问题是,在其有效负载和标头中包含 Java 对象的消息应转换为 byte[] 和/或写入流。 Java 自己的序列化显然不会削减它,因为它不可互操作。我的偏好是创建一个接口,允许用户为参与序列化的所有对象实现所需的逻辑。

这意味着我不想要求客户端开发人员生成他的域代码,而是为需要它的对象定义一个序列化程序。接口类似于:

public interface PayloadSerializer<T> {
    byte[] bytesForObject(T source);
    T objectFromBytes(byte[]);
    //similar methods for streaming potentially
}

//add HeaderSerializer, MessageSerializer

这是一个明智的想法吗?完美的界面应该是什么样子?是否有一种标准的可互操作方式来序列化在这种情况下有意义的对象?

【问题讨论】:

    标签: java serialization messaging interop spring-integration


    【解决方案1】:

    在 java 中有一整套生成 XML 的框架,比如 JaxB,... 现在这些格式中的一些也可能是二进制 blob,很难在其他平台上使用,所以在你之前尝试一下是值得的买。还有非常好用的 XML 序列化器。

    JSON 现在非常流行,因为它可以轻松地与浏览器进行互操作,而且它的可读性比 XML 更简洁。

    当性能很重要时,Protocol Buffers 和 Thrift 很受欢迎。这些是二进制格式,但在多个平台上得到了很好的指定和很好的支持。

    【讨论】:

    • 我研究了 Thrift,但我没有发现我正在寻找的东西很好地隔离,因此从框架中依赖它是有意义的。 Protocol Buffer 看起来也不错,但它似乎遭受了同样的旧 RPC 病毒。我想公开一个将对象转换为 byte[] 的接口,而不是代码生成器。我认为 OXM 是一种不同的野兽,它具有很强的互操作性,但对存储的用处不大。
    • JSon 在新一批用于高效存储的 NoSQL 数据库(如 MongoDB 和 CouchDB)的直接支持下变得非常流行。 GSon、FlexJson 和 Jackson 来这里推荐:stackoverflow.com/questions/338586/a-better-java-json-library
    • 很多有用的信息,谢谢!我还没有购买答案 b/c 我相信即使 JSon 或 XML 是可行的选择,合同也应该在 byte[] 和/或 *Stream 上。
    【解决方案2】:

    我会尝试将 java 对象序列化为 XML 表示并将其转换为字节数组以用于流 I/O。

    【讨论】:

    • 用户最终可能会诉诸于此,但我不想强迫他们,所以如果有其他选项我希望他们也可以使用该界面......主要考虑的是API设计,尽管工作用例是其中的重要组成部分。
    猜你喜欢
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2015-04-16
    • 2013-09-11
    • 1970-01-01
    相关资源
    最近更新 更多