Какой опыт работы с RabbitMQ у вас есть?

«Какой опыт работы с RabbitMQ у вас есть?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, есть опыт работы с RabbitMQ как брокером сообщений (AMQP).

Основные задачи и концепции:

  • Настройка инфраструктуры: exchanges (direct, fanout, topic), queues, bindings.
  • Публикация и потребление сообщений.
  • Тестирование сценариев с Dead Letter Exchanges (DLX) и TTL (Time-To-Live).
  • Работа с подтверждениями доставки (ack/nack).

Пример тестирования потребителя (consumer) на Python с pika:

import pika
import json

def test_message_consumption():
    """Тест проверяет, что потребитель корректно обрабатывает сообщение из очереди."""
    connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
    channel = connection.channel()
    channel.queue_declare(queue='test_orders')

    # 1. Публикуем тестовое сообщение
    test_message = {'order_id': 789, 'action': 'create'}
    channel.basic_publish(exchange='',
                          routing_key='test_orders',
                          body=json.dumps(test_message))

    # 2. Извлекаем одно сообщение для проверки
    method_frame, header_frame, body = channel.basic_get(queue='test_orders', auto_ack=True)
    if method_frame:
        received_data = json.loads(body)
        assert received_data['order_id'] == 789
        print("Тест пройден: сообщение получено и валидно.")
    else:
        print("Ошибка: сообщение не найдено в очереди.")
    connection.close()

Почему это важно для QA: Тестирование асинхронных систем требует проверки гарантий доставки, порядка сообщений и обработки ошибок (например, через DLX).