注意:在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,在$msg中将errorCount增加1,最后通过返回false来请求$msg。
这有以下优点:
errorCount > 5的时候,我只是放弃了这条信息..return false。这会很好,但是:
在$msg被RabbitMQ请求之前,是否有一种修改它的方法?
发布于 2013-02-20 14:47:37
正如这的答案所指出的那样,RabbitMQ不允许您在发布消息后更改它们。当您返回false时,RabbitMQ只是将原始消息放回队列中进行处理。
通过使用所需的更改重新发布消息,然后通过返回true来使用原始消息,可以获得相同的效果。您可能希望使用默认(无名)交换重新发布消息,以便可以将其直接发送到您从其中获得原始消息的队列中。
https://stackoverflow.com/questions/14974353
复制相似问题