Я упростил настройку пользователя 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
не было ни одного, является ли размер очереди бесконечным или он может обрабатывать только одно сообщение?»