Ответ
Очередь гарантирует доставку сообщений через механизмы подтверждения (acknowledgment) и сохранения состояния. Основные принципы:
- Сохранение сообщений – сообщения хранятся в надежном хранилище (например, диске) до подтверждения обработки.
- Подтверждение (ACK/NACK) – потребитель явно подтверждает успешную обработку (
ACK), иначе сообщение возвращается в очередь или перенаправляется в Dead Letter Queue (DLQ). - Транзакции – поддержка транзакционных операций для обеспечения атомарности (например, в RabbitMQ или Kafka).
Пример на Python с RabbitMQ:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='task_queue', durable=True) # durable=True для сохранения на диск
# Публикация с persistence
channel.basic_publish(
exchange='',
routing_key='task_queue',
body='Сообщение',
properties=pika.BasicProperties(delivery_mode=2) # delivery_mode=2 для persistence
)
# Подписка с ручным ACK
def callback(ch, method, properties, body):
print(f"Получено: {body}")
ch.basic_ack(delivery_tag=method.delivery_tag) # Подтверждение
channel.basic_consume(queue='task_queue', on_message_callback=callback, auto_ack=False)
channel.start_consuming()