Я пытаюсь отправить словарь python от производителя python к потребителю python, используя RabbitMQ. Сначала производитель устанавливает соединение с локальным сервером RabbitMQ. Затем он создает очередь, на которую будет доставлен сообщение, и, наконец, отправляет сообщение. Сначала потребитель подключается к серверу RabbitMQ, а затем уверен, что очередь существует, создавая одну и ту же очередь. Затем он получает сообщение от производителя в функции обратного вызова и печатает значение «id» (1). Вот сценарии для производителя и потребителя:RabbitMQ: Как отправить словарь Python между производителем и потребителем Python?
producer.py сценарий:
import pika
import sys
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='task_queue', durable=True)
message = {'id': 1, 'name': 'name1'}
channel.basic_publish(exchange='',
routing_key='task_queue',
body=message,
properties=pika.BasicProperties(
delivery_mode = 2, # make message persistent
))
print(" [x] Sent %r" % message)
connection.close()
consumer.py сценарий:
import pika
import time
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='task_queue', durable=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
print(body['id'])
print(" [x] Done")
ch.basic_ack(delivery_tag = method.delivery_tag)
channel.basic_qos(prefetch_count=1)
channel.basic_consume(callback,
queue='task_queue')
channel.start_consuming()
Но, когда я бегу producer.py, я получаю это ошибка:
line 18, in <module>
delivery_mode = 2, # make message persistent
File "/Library/Python/2.7/site-packages/pika/adapters/blocking_connection.py", line 1978, in basic_publish
mandatory, immediate)
File "/Library/Python/2.7/site-packages/pika/adapters/blocking_connection.py", line 2064, in publish
immediate=immediate)
File "/Library/Python/2.7/site-packages/pika/channel.py", line 338, in basic_publish
(properties, body))
File "/Library/Python/2.7/site-packages/pika/channel.py", line 1150, in _send_method
self.connection._send_method(self.channel_number, method_frame, content)
File "/Library/Python/2.7/site-packages/pika/connection.py", line 1571, in _send_method
self._send_message(channel_number, method_frame, content)
File "/Library/Python/2.7/site-packages/pika/connection.py", line 1596, in _send_message
content[1][s:e]).marshal())
TypeError: unhashable type
Может ли кто-нибудь мне помочь? Благодаря!
Вы можете попробовать преобразовать ваше сообщение в объект JSON, а затем отправить. –