2014-07-16 65 views
1

我越來越絕望,試圖在發送消息時使用Qpid Proton AMQP Messenger API用於Python。Qpid質子信使API錯誤處理

這是一個示例性消息上localhost運行Qpid經紀人發送到不存在的隊列myqueue當從交互式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(或標準錯誤)和沒有跡象表明消息未在API中傳遞。當消息位於緩衝區時,status()調用在發送之前返回None,並且在消息被放置之後。

我錯過了什麼嗎?

使用Python 2.7,Qpid質子0.7。

+0

我只是補充說,當隊列確實存在並且消息成功存儲時,除LINK ERROR消息之外,工作流看起來完全一樣。在代碼中無法知道消息是否進入隊列。 – Beli

回答

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