我试图发送一个消息使用Python Qpid质子结合自定义属性,但是我无法找到这样做的正确方法?
message = Message()
message.body = u"hello body"
data = Data()
data.put_map()
data.enter()
data.put_string("key")
data.put_string("value")
data.exit()
message.properties = data
messenger.put(message)
messenger.send()
Run Code Online (Sandbox Code Playgroud)
结果是...
Traceback (most recent call last):
File "./candy_ingest.py", line 37, in <module>
messenger.put(message)
File "/usr/lib/python2.7/dist-packages/proton.py", line 473, in put
message._pre_encode()
File "/usr/lib/python2.7/dist-packages/proton.py", line 781, in _pre_encode
props.put_object(self.properties)
File "/usr/lib/python2.7/dist-packages/proton.py", line 2036, in put_object
putter = self.put_mappings[obj.__class__]
KeyError: <class proton.Data at 0x2320420>
Run Code Online (Sandbox Code Playgroud)
欢迎任何帮助!
TIA,托马斯。
这是我用于将 RaspBerryPi 连接到 Windows Azure 服务总线的代码
import sys
from proton import *
#This code is for initiating the AMQP messenger
amqpmng = Messenger()
amqpmng._set_timeout(2000L) #Set timeout for sending and receiving at 2000 ms
address = "amqp://owner:<longpassword>@<namespace>.servicebus.windows.net/<queuename>"
#This code is for creating messages
msg = Message()
msg.subject = "This is a testmessage"
msg.body = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
#This code is for sending messages
try:
msg.address = address
amqpmng.put(msg)
amqpmng.send()
except:
e = sys.exc_info()[0]
print e, "Waited for 2s to send messages, nothing send, connection timed out"
amqpmng.stop();
#This code is for receiving messages
amqpmng.subscribe(address)
amqpmng.start()
try:
amqpmng.recv(1) #receive exactly 1 message (you can enter any value)
msg = Message()
while amqpmng.incoming > 0:
amqpmng.get(msg)
print(msg.body)
except:
e = sys.exc_info()[0]
print e, "Waited for 2s to receive messages, nothing received, connection timed out"
amqpmng.stop()
Run Code Online (Sandbox Code Playgroud)
而且消息类只有两个以数据为参数的方法。
message.decode(data)
message.load(data)
Run Code Online (Sandbox Code Playgroud)
我认为你应该使用 message.load(data)。
另外,我从 API 参考中了解到,message.properties 正在使用 python 类字典来映射其类属性。
让我知道是否有帮助!
| 归档时间: |
|
| 查看次数: |
1431 次 |
| 最近记录: |