Django 使用kombu-TypeError&x27发布消息;str';对象不可调用
将消息负载编码为json后,我将尝试使用以下内容发布到代理:Django 使用kombu-TypeError&x27发布消息;str';对象不可调用,django,kombu,Django,Kombu,将消息负载编码为json后,我将尝试使用以下内容发布到代理: connection = establish_connection() producer = Producer(channel=connection, exchange="inbound", routing_key="apisubmit") producer.publish(body=pl,headers={"api_access_key": "
connection = establish_connection()
producer = Producer(channel=connection,
exchange="inbound",
routing_key="apisubmit")
producer.publish(body=pl,headers={"api_access_key": "xxxx", "client_id": 4, "object_type": "location", "action": "c"})
django正在返回以下内容:
Traceback:
File "/usr/local/pythonenv/openblock/lib/python2.6/site-packages/Django-1.3.1-py2.6.egg/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/pythonenv/openblock/src/myblock/myblock/barz/views.py" in testtwo
19. msg=publish_kombu()
File "/usr/local/pythonenv/openblock/src/myblock/myblock/barz/messaging.py" in publish_kombu
99. routing_key="apisubmit")
File "/usr/local/lib/python2.6/dist-packages/kombu/messaging.py" in __init__
82. self.exchange = self.exchange(self.channel)
Exception Type: TypeError at /barz/publish_kombu/
Exception Value: 'str' object is not callable
Producer.exchange
必须是exchange
。默认情况下,它是Exchange(“”
),您必须以某种方式将其设置为字符串。无论何时将值传递给“Exchange”参数,它都必须是Exchange
对象
您的代码必须是:
exchange = Exchange(name='inbound') # the minimal declaration
connection = establish_connection()
producer = Producer(channel=connection,
exchange=exchange,
routing_key="apisubmit")
producer.publish(body=pl,headers={"api_access_key": "xxxx", "client_id": 4, "object_type": "location", "action": "c"})
有关Exchange参数的完整列表-
我在队列声明时遇到了相同的错误,即
queue = Queue(name=queue_name, exchange='host_tasks', routing_key=binding_key)
bound_queue = queue(channel) # only once bound, we can call declare(), purge(), delete() on exchange
这样宣布交换,如thah
exchange = Exchange('host_tasks', 'direct', durable=True)
queue = Queue(name=queue_name, exchange=exchange, routing_key=binding_key)
bound_queue = queue(channel)
别忘了导入Exchange