2015-12-10 12 views
7

Tôi có một RabbitMQ 3.4.2 instance với plugin quản lý web được cài đặt.Cách gửi tải trọng JSON cho RabbitMQ bằng cách sử dụng plugin web?

Khi tôi đẩy tới thông báo {'operationId': 194} vào hàng đợi bằng gói hàng đợi của Python là kombu, thông báo được đọc ở đầu kia làm từ điển.

Tuy nhiên, khi tôi gửi tin nhắn bằng cách sử dụng web console:

enter image description here

tôi nhận được lỗi sau ngày kết thúc nhận:

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

Tôi đã thử thêm một tiêu đề content-type và tài sản, không thành công.

Vì mã trình đọc giống nhau, điều đó có nghĩa là người gửi web không đánh dấu thư đã gửi dưới dạng tải trọng từ điển JSON/từ điển và do đó nó được đọc dưới dạng chuỗi ở đầu bên kia.

Bất kỳ ý tưởng nào về cách đánh dấu thư dưới dạng tin nhắn JSON bằng bảng điều khiển web RabbitMQ?

Trả lời

13

Tôi đã phải sử dụng content_type thay vì content-type (dấu gạch dưới thay vì gạch nối).

Đây là một quyết định thiết kế khá đáng ngờ, vì tiêu chuẩn mọi người đều biết là content-type.

enter image description here

+0

Nó không phải là một tiêu đề HTTP ... Nó để phân biệt rằng từ khóa cũng như tuân theo quy ước RabbitMQ sử dụng dấu gạch dưới cho các thuộc tính của nó. – Jakub

1

Bạn cần phải hủy tuần tự đầu ra.

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

Ngoài ra {'operationId': 194} không hợp lệ JSON. Mặc dù có vẻ như bạn sử dụng dấu ngoặc kép trong ảnh chụp màn hình, nhưng hãy đảm bảo bạn thay thế dấu nháy đơn bằng dấu ngoặc kép.

Chỉnh sửa: Vì vậy, bạn chính xác, kombu nên xử lý việc này. Nhìn vào mã, có khả năng tiêu đề phân biệt chữ hoa chữ thường. Thay đổi tiêu đề thuộc tính từ Content-Type thành content-type.

+0

Điều thú vị là các thư được gửi từ mã Python không yêu cầu deserialization trên đầu nhận; do đó, tôi đoán có một số siêu dữ liệu thực hiện công việc cho tôi. Khi tôi gửi '{'operationId': 194}' nó được nhận dưới dạng từ điển ở đầu bên kia. Tôi cũng muốn có hành vi này khi gửi từ bảng điều khiển web. –

+0

@AdamMatan Bạn nói đúng. Tôi nghĩ rằng điều này có thể là ngớ ngẩn khi tên Tiêu đề phân biệt chữ hoa chữ thường. – eandersson

+0

Tôi đáng lẽ phải chọn nó. Tôi có cùng một cài đặt bằng cách sử dụng '' '_''' trong thư viện amqp của riêng tôi. https://github.com/eandersson/amqp-storm/blob/master/amqpstorm/message.py#L208 – eandersson

Các vấn đề liên quan