RabbitMQ在第一个消息之后删除消息
我正在使用芹菜3.0.18和RabbitMQ 3.0.2。我使用celery.send_task将一个任务发送到另一个应用程序,我可以在日志中看到send_task调用,我可以看到数据包离开worker实例,当我调用RabbitMQ在第一个消息之后删除消息,rabbitmq,celery,Rabbitmq,Celery,我正在使用芹菜3.0.18和RabbitMQ 3.0.2。我使用celery.send_task将一个任务发送到另一个应用程序,我可以在日志中看到send_task调用,我可以看到数据包离开worker实例,当我调用tcpflow-ce-I any port 5672时,我可以看到数据包到达RabbitMQ实例,但是,只有第一条消息到达队列。它们都有相同的路由密钥,我尝试重新创建交换和绑定,甚至创建了一个新的RabbitMQ实例,但似乎没有任何效果。在AWS基础设施崩溃后,我们不得不从头开始重新
tcpflow-ce-I any port 5672
时,我可以看到数据包到达RabbitMQ实例,但是,只有第一条消息到达队列。它们都有相同的路由密钥,我尝试重新创建交换和绑定,甚至创建了一个新的RabbitMQ实例,但似乎没有任何效果。在AWS基础设施崩溃后,我们不得不从头开始重新构建RabbitMQ之前,这项技术在几个月内一直运行良好。奇怪的是,我在其他应用程序上使用了完全相同的设置,使用相同的代理和相同的交换、绑定和队列,并且它在那里工作得非常好。另外,当我使用管理脚本中的相同调用将消息发送到同一个exchange时,它也可以工作,在同一个实例上从shell运行,但当它从工作进程中的芹菜任务发送时,它就不工作了
有什么问题吗?最终,我找到了问题所在,但不清楚这是预期行为,是芹菜错误还是兔子错误 除了我们的应用程序任务外,我还有一个自定义日志处理程序,用于使用RabbitMQ、celery.send_任务将日志发送到中心位置。此日志处理程序向名为application.logger的exchange发送消息,其中包含路由键,如application.logger.info、application.logger.warning等,并具有将某些日志级别路由到特定队列的绑定。此交换、绑定和队列直接在RabbitMQ中创建,而不是在芹菜路由中定义
当工作人员尝试向此交换发送消息,但消息不存在时,芹菜将记录404 NOT_FOUND错误。在此之后,使用相同连接发送到其他交换机的任务不会被传递。它们是由worker实例发送的,我们可以看到数据包到达,该连接的RabbitMQ管理屏幕甚至以kb/s的速度显示来自客户端的数据,但没有传递任何消息。您确定您的应用程序在将任务发送到该实例后,不会将其作为芹菜worker。我想它会像你描述的那样