我正在使用 Python、Celery 和 RabbitMQ 从松散耦合的系统中生成消息。但是,我担心互操作性。
当直接从 celery 生成的 RabbitMQ 检查消息有效负载时,我得到以下二进制格式:
我强烈怀疑这是一种二进制泡菜格式。但是,我一般很难找到有关二进制泡菜格式的信息。
所以,我真的有几个问题:
- 这是二进制泡菜格式吗?
- 有哪些资源可用于映射二进制格式?
- 鉴于 celery 实际上会产生腌制数据,如果我想使用来自非 python 消费者(例如 c++ 或 php)的这些消息,我可以使用哪些选项?
- 您是否有使用 Celery、RabbitMQ 以及与其他非 python 消费者进行互操作的经验。你对这个主题有什么建议吗?
提前致谢...
更新:
根据 Brendan 的建议,我已将其切换为 JSON 序列化程序:
add.apply_async(args=[10, 10], serializer="json")
作为未来搜索者的参考,在这种特定的空情况下,JSON 格式似乎大了大约 15%(或 28 个字节):
此外,对于可能有兴趣从 C++ 中读取 pickle 格式的人,我发现这个问题很有帮助: 如何从 C 中读取 python pickle 数据库/文件?
更新 2:
根据 Asksol 的建议,我尝试了 zlib 压缩:
async_result = add.apply_async( (x, y), compression='zlib' )
我认为有一些有趣的结果,所以他们在这里:
正如您在此示例中看到的,Pickle 格式小于 JSON。但是,当将压缩添加到组合中时,压缩后的 JSON 实际上比任何一个版本的 Pickle 都要小。我也很好奇这两种格式的解析时间。虽然 JSON 旨在提高解析器的性能,但 Pickle 是基于偏移量的,这意味着它不必被迭代。我想知道是否有人对这两种格式进行了任何性能基准测试,包括压缩和不压缩,并考虑了解析 CPU 时间。