1

Qpid Proton AMQP Messenger API for Pythonを使用してメッセージを送信するときに、エラーを処理しようと必死になっています。

myqueueこれは、上で実行されている Qpid ブローカー上の存在しないキューに送信する場合の対話型 Python インタープリターからのメッセージ送信セッションの例です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()

これLINK ERRORは stdout (または stderr) に直接出力され、メッセージが API で配信されていないことを示すものはありません。status() 呼び出しは、メッセージがバッファ内にある場合は送信前に None を返し、メッセージがドロップされた場合も後に None を返します。

何か不足していますか?

Python 2.7、Qpid Proton 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 に答える