1

在使用Qpid Proton AMQP Messenger API for Python发送消息时,我非常想处理错误。

这是从交互式 Python 解释器发送到myqueue运行在 Qpid 代理上的不存在队列时的示例消息发送会话localhost

>>> from proton import *
>>> mng = Messenger()
>>> mng.timeout = 2000L
>>> m = Message()
>>> m.address = 'amqp://localhost/myqueue'
>>> m.subject = 'Test message'
>>> tracker = mng.put(m)
>>> repr(mng.status(tracker)) # status before send
'None'
>>> ret = mng.send()          # send unconditionally returns None
LINK ERROR (amqp:not-found) Node not found: myqueue
>>> repr(mng.status(tracker)) # status after send
'None'
>>> mng.stop()

直接打印到 stdout(或 stderr) ,LINK ERROR并且没有迹象表明消息未在 API 中传递。当消息位于缓冲区中时,status() 调用在发送之前返回 None,并且在消息被丢弃之后也返回 None。

我错过了什么吗?

使用 Python 2.7,Qpid 质子 0.7。

4

1 回答 1

2

最后。我读到outgoing_window信使的属性默认为 0。它是跟踪的传出消息的数量。将其设置为更高的数字可以解决问题:

>>> from proton import *
>>> mng = Messenger()
>>> mng.timeout = 2000L
>>> mng.outgoing_window = 1
>>> m = Message()
>>> m.address = 'amqp://localhost/myqueue'
>>> m.subject = 'Test message'
>>> tracker = mng.put(m)
>>> repr(mng.status(tracker))
'PENDING'
>>> ret = mng.send()
LINK ERROR (amqp:not-found) Node not found: myqueue
>>> repr(mng.status(tracker))
'ABORTED'
>>> mng.stop()

现在我可以跟踪消息的状态并查看它是ABORTED

于 2014-07-16T20:29:50.313 回答