Обработка ошибок API Qpid Proton Messenger

Я отчаянно пытаюсь справиться с ошибками при отправке сообщений с помощью Qpid Proton AMQP Messenger API для 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()

LINK ERROR печатается непосредственно в stdout (или stderr), и нет никаких признаков того, что сообщение не доставлено в API. Вызов status() возвращает None до отправки, когда сообщение находится в буфере, а также после того, как оно было отброшено.

Я что-то пропустил?

Используя Python 2.7, Qpid Proton 0.7.

1 ответ

Решение

В заключение. Я читаю о собственности 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()

Теперь я могу отслеживать статус сообщения и видеть, что оно было прервано.

Другие вопросы по тегам