Какие знаешь типы гарантии доставки сообщений
Python
Middle
Без компании
Какие знаешь типы гарантии доставки сообщений
Ответы
В Python при работе с очередями сообщений (например, RabbitMQ, Kafka) есть несколько типов гарантий доставки:
- **At-most-once** – сообщение может быть потеряно, но не будет доставлено дважды. Пример:
```
channel.basic_publish(exchange='', routing_key='queue', body=message)
```
- **At-least-once** – сообщение гарантированно доставлено, но возможны дубли. Достигается подтверждением (ack):
```
channel.basic_consume(queue='queue', on_message_callback=callback, auto_ack=False)
```
- **Exactly-once** – сложная гарантия, требует идемпотентности или транзакций. В Kafka:
```
producer = KafkaProducer(acks='all', enable_idempotence=True)
```
- **Transactional** – доставка в рамках транзакции (например, база данных + очередь). RabbitMQ:
```
channel.tx_select()
channel.basic_publish(...)
channel.tx_commit()
```