web-dev-qa-db-ja.com

Webプラグインを使用してJSONペイロードをRabbitMQに送信する方法

RabbitMQ 3.4.2インスタンス にWeb管理プラグインがインストールされています。

Pythonの komb キューパッケージを使用して、メッセージ{'operationId': 194}をキューにプッシュすると、メッセージは反対側で辞書として読み込まれます。

ただし、Webコンソールを使用してメッセージを送信すると、次のようになります。

enter image description here

受信側で次のエラーが発生します。

operation_id = payload['operationId']
TypeError: string indices must be integers

content-typeヘッダーとプロパティを追加しようとしましたが、成功しませんでした。

リーダーコードは同じであるため、Web送信者は送信されたメッセージをJSON /辞書のペイロードとしてマークしないため、相手側では文字列として読み取られます。

RabbitMQ Webコンソールを使用してメッセージをJSONメッセージとしてマークする方法はありますか?

12
Adam Matan

content_typeではなくcontent-typeを使用する必要がありました(ハイフンではなくアンダースコア)。

誰もが知っている標準は content-type であるため、これはかなり疑わしい設計決定です。

enter image description here

29
Adam Matan

出力を逆シリアル化する必要があります。

import json
payload = json.loads(payload)
operation_id = payload['operationId']

また、{'operationId': 194}は無効なJSONです。スクリーンショットでは二重引用符を使用しているように見えますが、一重引用符を二重引用符に置き換えてください。

編集:正解です。kombuがこれを処理する必要があります。コードを見ると、ヘッダーでは大文字と小文字が区別される可能性があります。プロパティヘッダーをContent-Typeからcontent-typeに変更します。

1
eandersson