Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RabbitMQ在第一个消息之后删除消息_Rabbitmq_Celery - Fatal编程技术网

RabbitMQ在第一个消息之后删除消息

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基础设施崩溃后,我们不得不从头开始重新

我正在使用芹菜3.0.18和RabbitMQ 3.0.2。我使用celery.send_task将一个任务发送到另一个应用程序,我可以在日志中看到send_task调用,我可以看到数据包离开worker实例,当我调用
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。我想它会像你描述的那样