修改消费者内部rabbitMQ发送的消息

Mic*_*ick 5 message-queue amqp rabbitmq symfony

注意:Symfony2 中通过RabbitMQBundle使用RabbitMq

我的制作人发送这样的消息:

$message = array(
    'class' => get_class($receiver),
    'id' => $receiver->getId(),
    'stepNumber' => 1,
    'errorCount' => 0
);
Run Code Online (Sandbox Code Playgroud)

消费者$receiver从数据库中检索并给他发送一封电子邮件。

public function execute(AMQPMessage $msg)
{
    //Step1 - retrieve user from db

    //Step2 - send email

    //Step3 - update stuff in database
}
Run Code Online (Sandbox Code Playgroud)

为了跟踪错误,我想在每一步处理异常。如果在第3步抛出异常,我想修改stepNumber为3,将errorCountin增加1 $msg,最后$msg通过返回重新排队false

这具有以下优点:

  • 当消费者再次处理消息时,它不会再次发送电子邮件。
  • errorCount > 5,我只是丢弃消息.. return false

这会很棒,但是:

有没有办法$msg在RabbitMQ重新排队之前修改它?

Bri*_*ell 5

正如这个答案指出的那样,RabbitMQ 不允许您在发布消息后更改消息。当您返回 false 时,RabbitMQ 只是将原始消息放回队列中进行处理。

通过使用您想要的更改重新发布消息,然后通过返回 true 来使用原始消息,可以获得相同的效果。您可能希望使用默认(无名)交换重新发布消息,以便您可以将其直接发送到您从中获取原始消息的队列。