0

我正在使用 docker-compose.yml 管理 5 个 docker 容器。

容器功能是:

  • 消息生产者 - 消息生产者代码封装在一个类中,并在 45 个线程中创建 45 个实例
  • rabbitmq 容器 - 这是 rabbitmq:latest 图像,用于对产生的消息进行排队
  • 消息接收器 - 消息接收器代码封装在一个类中,并在 90 个线程中创建 90 个实例。回调函数处理rabbitmq容器中的消息并将结果写入数据库容器。回调包括 basic_ack:

    ch.basic_ack(delivery_tag=method.delivery_tag)

  • 数据库容器 - 这是 Centurylink/mysql:latest 镜像

  • 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 | 被杀

this_project_message_producer_1 的意外 API 错误(HTTP 代码 500)响应正文:连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。

我不确定从哪里开始寻找/解决这里的问题。一切都开始工作然后中断的事实让我认为这可能是由于消息队列大小或容器可用的资源,但我不知道如何测试这一点。

有什么帮助吗?

4

0 回答 0