Я управляю 5 док-контейнерами, используя docker-compose.yml.
Функции контейнера:
- производитель сообщений - код производителя сообщений заключен в класс, и 45 экземпляров созданы в 45 потоках
- контейнер rabbitmq -Это rabbitmq: последнее изображение для помещения в очередь созданных сообщений
получатель сообщения - код получателя сообщения упакован в класс, и 90 экземпляров создаются в 90 потоках.Функция обратного вызова обрабатывает сообщения в контейнере rabbitmq и записывает результаты в контейнер базы данных.Обратный вызов включает basic_ack:
ch.basic_ack (delivery_tag = method.delivery_tag)
Контейнер базы данных - это centurylink / mysql: последнее изображение
- Сайт Django - подключен к контейнеру базы данных и используется для запроса содержимого базы данных
Соединение с контейнером rabbitmq создается одинаково с использованием одинаковых параметров как для производителя, так и дляполучатель:
connection = pika.BlockingConnection(
pika.ConnectionParameters(host=TARGET_QUEUE_NAME,
port=5672,
heartbeat_interval=0,
backpressure_detection=True,
blocked_connection_timeout=10))
Первоначально процесс работает правильно, и записи заметно обновляются, как ожидается, если вы обновите сайт Django.В какой-то момент через несколько минут docker замедляется и в итоге останавливается, а обновление страницы django занимает более 20 секунд.В конце концов производитель сообщений завершает работу с ошибкой:
message_producer_1 |Убито
Неожиданная ошибка API для this_project_ message_producer_1 (HTTP code 500) Тело ответа: Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через определенный промежуток времени, или не удалось установить соединение, так как подключенный хост не смог ответить.
Я не уверен, с чего начать поиск / решение проблемы здесь.Тот факт, что все сначала работает, а затем ломается, заставляет меня думать, что это, вероятно, связано с размером очереди сообщений или ресурсами, доступными для контейнеров, но я не знаю, как это проверить.
Любая помощь?