Qpid Proton Messenger API错误处理

时间:2014-07-16 14:34:10

标签: python qpid

在使用 Qpid Proton AMQP Messenger API 为Python发送邮件时,我正急着尝试处理错误。

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

>>> 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()

LINK ERROR直接打印到stdout(或stderr),并且没有指示消息未在API中传递。当消息位于缓冲区中时以及删除之后,status()调用在发送之前返回None。

我错过了什么吗?

使用Python 2.7,Qpid Proton 0.7。

1 个答案:

答案 0 :(得分:2)

最后。我读到了信使默认为0的属性outgoing_window。它是被跟踪的外发邮件的数量。将其设置为更高的数字可以解决问题:

>>> 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()

现在,我可以跟踪消息的状态,并看到消息已被中止