2015-12-10 35 views
7

我有一個RabbitMQ 3.4.2 instance與安裝的Web管理插件。如何使用web插件將JSON負載發送到RabbitMQ?

當我使用Python的kombu隊列包將消息{'operationId': 194}推送到隊列時,消息在另一端作爲字典讀取。

然而,當我使用Web控制檯發送消息:

enter image description here

我得到在接收端以下錯誤:

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

我曾嘗試加入content-type頭和財產,沒有成功。

由於閱讀器代碼是相同的,這意味着Web發件人不會將發送的郵件標記爲JSON /字典有效內容,因此在另一端讀取爲字符串。

任何想法如何使用RabbitMQ Web控制檯將消息標記爲JSON消息?

回答

13

我不得不使用content_type而不是content-type(下劃線而不是連字符)。

這是一個相當可疑的設計決策,因爲每個人都知道的標準是content-type

enter image description here

+0

它不是一個HTTP頭...這是爲了區別這一點,以及遵守RabbitMQ慣例使用下劃線的屬性。 – Jakub

1

您需要反序列化輸出。

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

此外{'operationId': 194}是無效的JSON。儘管它看起來像在截圖中使用雙引號,但請確保用雙引號替換單引號。

編輯: 那麼你是正確的,應該海帶處理這個。查看代碼可能是頭文件區分大小寫。將屬性標題從Content-Type更改爲content-type

+0

有趣的是,從Python代碼發送的消息需要在接收端沒有反序列化;因此,我想有一些元數據可以幫我完成工作。當我發送'{'operationId':194}'時,它在另一端作爲字典被接收。我也想在從Web控制檯發送時出現這種行爲。 –

+0

@AdamMatan你說得對。我認爲這可能與標題名稱區分大小寫一樣愚蠢。 – eandersson

+0

我應該撿起來的。我在我自己的amqp庫中使用了'''_'''。 https://github.com/eandersson/amqp-storm/blob/master/amqpstorm/message.py#L208 – eandersson

相關問題