注: 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 で例外がスローされた場合、3 に変更し、を 1stepNumber
増やし、最後にを返して を再キューイングします。errorCount
$msg
$msg
false
これには次の利点があります。
- コンシューマがメッセージを再度処理するとき、電子メールを再度送信することはありません。
- のとき、私はメッセージを
errorCount > 5
破棄します..return false
これは素晴らしいことですが、: