Complete the code to declare a durable queue in RabbitMQ.
channel.queue_declare(queue='task_queue', durable=[1])
Setting durable=True ensures the queue survives RabbitMQ restarts, handling edge cases where the server restarts unexpectedly.
Complete the code to enable message acknowledgments to handle message loss edge cases.
channel.basic_consume(queue='task_queue', on_message_callback=callback, auto_ack=[1])
Setting auto_ack=False means the consumer must acknowledge messages, preventing message loss if the consumer crashes.
Fix the error in the code to set message persistence correctly.
channel.basic_publish(exchange='', routing_key='task_queue', body=message, properties=pika.BasicProperties([1]=2))
The correct property name is delivery_mode. Setting it to 2 marks the message as persistent to survive RabbitMQ restarts.
Fill both blanks to create a queue with dead-letter exchange and message TTL to handle message expiration edge cases.
args = {'x-dead-letter-exchange': [1], 'x-message-ttl': [2]
channel.queue_declare(queue='task_queue', arguments=args)Setting x-dead-letter-exchange to 'dlx' routes expired messages to a dead-letter queue. x-message-ttl set to 30000 means messages expire after 30 seconds.
Fill the blanks to set up a consumer with prefetch count and manual acknowledgments to handle load and failure edge cases.
channel.basic_qos(prefetch_count=[1]) channel.basic_consume(queue='task_queue', on_message_callback=callback, auto_ack=[2]) channel.start_consuming() # Starts consuming messages
Setting prefetch_count=1 limits the consumer to one unacknowledged message at a time. auto_ack=False requires manual acknowledgment, preventing message loss. start_consuming() begins the message consumption loop.