Python、Celery、RabbitMQを使用して、疎結合システムからメッセージを生成しています。ただし、相互運用性が心配です。
セロリによって生成されたRabbitMQから直接メッセージペイロードを検査すると、次のバイナリ形式が得られます。
これはバイナリピクルスフォーマットだと強く思います。しかし、一般的にバイナリピクルス形式に関する情報を見つけるのに苦労しています。
だから、私は本当にいくつかの質問があります:
- これはバイナリピクルスフォーマットですか?
- バイナリ形式を計画するために利用できるリソースは何ですか?
- セロリが実際にピクルス化されたデータを生成することを考えると、Python以外のコンシューマー(c ++やphpなど)からのメッセージを消費したい場合、どのようなオプションを利用できますか?
- Celery、RabbitMQを使用したり、Python以外の他のコンシューマーと相互運用したりした経験はありますか。そのテーマについて何かアドバイスはありますか?
前もって感謝します...
アップデート:
Brendanの推奨に基づいて、これを次のJSONシリアライザーに切り替えました。
add.apply_async(args=[10, 10], serializer="json")
将来の検索者のための参考のために、この特定の空の場合のJSON形式は約15%大きい(または28バイト)ようです。
また、c ++からピクルス形式を読み取ることに興味があるかもしれない人々のために、私はこの質問が役に立ちました: Cからpythonピクルスデータベース/ファイルを読み取るにはどうすればよいですか?
更新2:
Asksolの推奨に基づいて、次のコマンドでzlib圧縮を試しました。
async_result = add.apply_async( (x, y), compression='zlib' )
興味深い結果がいくつかあると思ったので、ここにそれらがあります:
この例でわかるように、Pickle形式はJSONよりも小さいです。ただし、圧縮がミックスに追加されると、圧縮されたJSONは実際にはどちらのバージョンのPickleよりも小さくなります。また、どちらの形式の解析時間についても興味があります。JSONはパフォーマンスをパーサーするように設計されていますが、Pickleはオフセットに基づいているため、繰り返す必要はありません。圧縮の有無にかかわらず、CPU時間の解析を考慮に入れて、2つの形式でパフォーマンスベンチマークを実行した人はいないでしょうか。