stompest не отправляет подтверждение, пока интерпретатор python не завершит работу

#python #rabbitmq #stomp #asynchronous-messaging-protocol

#python #rabbitmq #топать #асинхронный протокол обмена сообщениями

Вопрос:

У меня есть очередь rabbitmq, запущенная на собственном сервере.

Я могу сделать sudo rabbitmqctl list_queues на этом сервере количество сообщений в очереди.

На другом сервере я получаю 10 кадров и подтверждаю их. Затем я проверяю количество сообщений в очереди, и это число не изменилось.

Затем я закрываю интерпретатор python и проверяю количество сообщений на сервере очередей, и их количество уменьшилось на ожидаемую величину (10). Я могу повторить этот процесс много раз, и происходит то же самое поведение.

Если это соответствует дизайну, как я могу заставить подтверждение произойти немедленно? Я подумал, что, возможно, в методе del клиентского класса есть странное поведение, но нет.

Происходит ли какая-то недокументированная магия?

Мой «подтверждающий» код:

 client = Stomp(StompConfig(uri=settings.QUEUE_SERVER))
client.connect()
client.subscribe(
    settings.INBOUND_QUEUE_NAME,
    {StompSpec.ACK_HEADER: StompSpec.ACK_CLIENT_INDIVIDUAL}
)

for each in range(10):
    frame = self.client.receiveFrame()
    self.client.ack(frame)
  

Комментарии:

1. Это не ожидаемое поведение. Пожалуйста, покажите код, с которым вы «подтверждаете». вероятно, что-то есть..

2. @alonisser Я добавил свой код

3. @rikAtree. извините, я пропустил, что вы не используете протокол ampq напрямую, но это (stomp) его вариант .. Поэтому я не могу быть уверен, что это не определенное поведение (тоже не очень разумно)..

4. Глядя на клиентский код, все кажется разумным. Я подозреваю, что где-то это плохая / неправильная область действия транзакции по умолчанию, но сразу ничего не выделяется. Пожалуйста, сообщите об этом в rabbitmq-обсудить ( lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss ), мы отправим сообщение об ошибке для расследования.

5. подойдет. Будет сложно предоставить дополнительную информацию и провести эксперименты, потому что я удалил stomp из своего стека, учитывая эту проблему. Я переключился на использование простого старого ванильного rabbitmq без плагина stomp и модуля python pika.