количество сообщений не увеличивается для очереди rabbitmq - PullRequest
0 голосов
/ 10 октября 2018

Я упростил настройку пользователя rabbitmq, которую я использовал, чтобы выяснить, куда отправляются новые опубликованные сообщения, когда очередь, в которую они направлены, выполняет какую-то задачу и не отправила подтверждающее сообщение издателю,Сценарий получателя печатает привет 4 раза с интервалами в 10 секунд перед отправкой подтверждения издателю.Насколько я понимаю, если я использую команду sudo rabbitmqctl list_queues -p test2 messages, я должен увидеть сумму готовых и неподтвержденных сообщений (источник https://www.rabbitmq.com/rabbitmqctl.8.html) Допустим, я запускаю скрипт отправителя 3 раза за 5 секунд. Я должен ожидать увидетьколичество этой команды равно 2, так как одно из этих 3 сообщений уже было опубликовано.Однако я вижу итоговое значение 0. Вот скрипт отправителя.

import pika   

credentials = pika.credentials.PlainCredentials("guest", "guest")
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.101.4', 5672, 'test2', credentials))
channel = connection.channel()

message = 'hello'

PERSISTENT_MESSAGES=2
channel.basic_publish(exchange='',
                      routing_key='tester',
                      body=message,
                      properties=pika.BasicProperties(
                          delivery_mode = PERSISTENT_MESSAGES, # make messages persistent
                      ))

print 'sent options for tester'
connection.close()

Вот мой скрипт получателя,

import pika
import time

credentials = pika.credentials.PlainCredentials("guest", "guest")
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.101.4', 5672, 'test2',
                                                               credentials))
channel = connection.channel()
channel.queue_declare(queue='tester',
                      durable=True,
                      arguments={'x-message-ttl': 1000,
                                 "x-dead-letter-exchange": "dlx",
                                 "x-dead-letter-routing-key": "dl",
                                 'durable': True,
                                 'x-max-length': 3})


def callback(ch, method, properties, body):
    try:
        print_hello()
        ch.basic_ack(delivery_tag=method.delivery_tag)
    except Exception as e:
        print e


def print_hello():
    print 'hello'
    time.sleep(10)
    print 'hello'
    time.sleep(10)
    print 'hello'
    time.sleep(10)
    print 'hello'
    time.sleep(10)


channel.basic_qos(prefetch_count=1)
channel.basic_consume(consumer_callback=callback, queue='tester')
channel.start_consuming()

В сценарии получателя я установил максимальную длину очереди, равную 3. Я знаю, что в очереди могут храниться все отправленные мной сообщения. Почему общее число сообщений будет отображаться только как 0?«Это предотвратило запуск следующего сообщения и вызова функции print_hello (). Кроме того, в качестве дополнительного вопроса, если x-max-length не было ни одного, является ли размер очереди бесконечным или он может обрабатывать только одно сообщение?»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...