首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用kombu - TypeError 'str‘对象的消息发布不可调用

使用kombu - TypeError 'str‘对象的消息发布不可调用
EN

Stack Overflow用户
提问于 2012-03-10 06:03:04
回答 2查看 334关注 0票数 1

在将消息有效负载编码到json之后,我尝试使用以下命令发布到代理:

代码语言:javascript
复制
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返回以下内容:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2012-03-11 00:57:55

Producer.exchange必须是Exchange。默认情况下,它是Exchange(""),您必须以某种方式将其设置为字符串。

票数 2
EN

Stack Overflow用户

发布于 2016-04-29 19:57:23

无论何时向“exchange”参数传递值,它都必须是一个Exchange对象。

你的代码必须是:

代码语言:javascript
复制
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"})

有关交换参数的完整列表- docs

我在队列声明中遇到了相同的错误,即

代码语言:javascript
复制
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

如此声明的交换,诸如此类

代码语言:javascript
复制
exchange = Exchange('host_tasks', 'direct', durable=True)
queue = Queue(name=queue_name, exchange=exchange, routing_key=binding_key)
bound_queue = queue(channel)

别忘了import Exchange

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9641621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档