python channel.basic_publish 报错‘bytes’ object has no attribute 'items'和‘str’ object has no attribute 'items'
时间: 2023-09-09 07:13:01 浏览: 168
这个错误通常是因为在使用 `channel.basic_publish` 发布消息时,参数类型不正确导致的。`basic_publish` 接受的消息体必须是 `bytes` 或者是一个 `pika.spec.Basic.Content` 对象。
如果你传递的是一个字符串类型的消息体,需要将其转换为 `bytes` 类型。可以使用 `encode()` 方法将字符串转换为字节流,例如:
```python
message = "Hello World"
channel.basic_publish(
exchange='',
routing_key='test_queue',
body=message.encode('utf-8')
)
```
如果你传递的是一个字典类型的消息体,需要将其转换为 `pika.spec.Basic.Content` 对象。可以使用 `pika.BasicProperties` 类来创建消息属性对象,例如:
```python
import json
from pika import BasicProperties
message = {
'name': 'Alice',
'age': 25
}
properties = BasicProperties(content_type='application/json')
body = json.dumps(message)
channel.basic_publish(
exchange='',
routing_key='test_queue',
body=body,
properties=properties
)
```
这里将字典类型的消息体使用 `json.dumps` 方法转换为字符串类型,然后使用 `BasicProperties` 创建了一个消息属性对象,最后将消息体和属性一起传递给 `basic_publish` 方法。
阅读全文