我正在使用mule和rabbitmq开展项目。方案是,我的应用程序侦听队列,处理消息然后响应它。我的问题是,是否接收java对象,使用mule" byte-array-to-object-transformer"并且返回响应对象可能比接收json具有更好的性能,将其转换为相关对象,然后再次转换响应并返回json。我认为这取决于rabbitmq机制和骡子变形金刚。
答案 0 :(得分:3)
性能问题的第1条规则:在您证明自己有性能问题之前,您没有性能问题。
这就是说,这是https://github.com/RichardHightower/json-parsers-benchmark/wiki/Serialization-Jackson-vs.-Boon-vs.-Java-Serialization中的一个有趣的内容:
大多数人都认为Java对象序列化速度比 Jackson JSON序列化因为Jackson正在使用JSON和Java 对象序列化是二进制的。但大多数人都错了。
Jackson JSON序列化比在Java对象中构建快得多 序列化。
就个人而言,根据经验,我尽量避免通过网络发送序列化的Java对象,因为事情可能会以可怕的方式崩溃。通过线路发送数据的方式更加强大,例如JSON。发送数据而不是序列化对象使您在处理数据时非常松懈,例如通过优雅地处理新/意外字段而不是因为二进制不兼容而在火灾中死亡。
答案 1 :(得分:0)
我们使用RabbitMQ进行序列化(由单独的lib提供)。它在消息长度方面提供了比JSON更好的性能,但在您的情况下这可能不是非常重要。
序列化方法的一个减号是所有对象(及其所有非瞬态字段)都应该是Serializable,这并不总是可行的。此外,在使用序列化时,您应始终注意发送和接收部分使用相同的语言,即具有相同版本的类。
如果您决定使用序列化,请查看FST - 我们正在使用的内容,它是标准Java序列化的绝佳替代品。它非常易于使用,并且在速度和输出尺寸方面都显示出很好的效果。