RabbitMQ - 如果处理时间过长,则丢弃消息

时间:2017-04-30 16:01:19

标签: php rabbitmq amqp rabbitmq-exchange rabbitmqctl

有没有办法让RabbitMQ在处理时间过长时丢弃该消息?

例如,如果我有一个电子邮件队列并且消费者脚本花费太长时间来发送电子邮件,请让它丢弃该消息(将其放入死信交换中)并选择队列中的下一个项目。

enter image description here

我知道x-message-ttl,但这不适用于此,因为一旦消息开始处理,它就会被忽略。

1 个答案:

答案 0 :(得分:0)

我认为没有办法在经纪人身上做你想做的事。要将邮件移至死信交换,您需要发送rejectnack条回复邮件,这在您的情况下似乎不可能。

例如,您有EmailSender服务和EmailGenerator服务。 你可以用这种方式组织它:

EmailGenerator通过电子邮件发送消息。

EmailSender收到它。

完成处理后,EmailSender会向sent confirmation发送EmailGenerator条消息。

EmailGenerator跟踪到目前为止已成功发送的内容的状态。 如果EmailGenerator在X秒内未收到特定电子邮件的sent confirmation消息,则会重新发送相应的电子邮件。