注意:在RabbitMq中通过RabbitMQBundle使用Symfony2。
我的制作人发送了这样的信息:
$message = array(
'class' => get_class($receiver),
'id' => $receiver->getId(),
'stepNumber' => 1,
'errorCount' => 0
);
消费者从数据库中检索$receiver
并向他发送电子邮件。
public function execute(AMQPMessage $msg)
{
//Step1 - retrieve user from db
//Step2 - send email
//Step3 - update stuff in database
}
为了跟踪错误,我想在每一步处理异常。如果在步骤3中抛出异常,我想将stepNumber
修改为3,在errorCount
中将$msg
增加1,最后通过返回{$msg
重新排队false
{1}}。
这具有以下优点:
errorCount > 5
时,我只是放弃了邮件.. return false
。这会很棒,但是:
$msg
?答案 0 :(得分:4)
正如this回答指出的那样,RabbitMQ不允许您在发布消息后更改消息。当您返回false时,RabbitMQ只是将原始消息放回队列中进行处理。
通过重新发布包含所需更改的消息可以获得相同的效果,然后通过返回true来消耗原始消息。您可能希望使用default (nameless) exchange重新发布消息,以便可以将其直接发送到您从原始消息中获取的队列。