注意:在Symfony2中通过RabbitMQBundle使用RabbitMq。
我的制作人发送这样的消息:
$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
中加1 $msg
,最后$msg
通过return重新入队false
。
这具有以下优点:
- 当消费者再次处理消息时,它不会再次发送电子邮件。
- 当 时
errorCount > 5
,我只是丢弃消息return false
......
这会很棒,但是: