登録された Web フックのデータを送信するために RabbitMq を使用しています。
ベース情報: システムで連絡先が作成された場合、メッセージはキューに入れられ、コンシューマーは後で登録された URL にフック データを送信します。
私の質問に: 連絡先が 5 秒で 2 回更新され、両方のメッセージがまだキューにある可能性があります。しかし、2 番目のメッセージがキューに入れられた場合、最初のメッセージが削除されることを望みます。
メッセージを手動で削除できないことはわかっています。しかし、メッセージにIDを設定することは何とか可能で、同じIDを持つ2つのメッセージが同じキューにある場合、最初のメッセージは自動的に削除/置換されますか? その 1 つのリクエストのみが URL に送信されます。メッセージ自体にメッセージIDを設定できることは知っています。しかし、古いものに取って代わるものは何も見つかりませんでした。
私のPHPコード(簡略化):
$connection = new AMQPConnection('localhost', 5672, 'test', 'test');
$channel = $connection->channel();
$channel->queue_declare(self::QUEUE_NAME, false, true, false, false);
$data = array(
'model' => get_class($subject),
'id' => $subject->getId(),
'event' => $event->getName()
);
$messageProperties = array(
'message_id' => get_class($subject) . '-' . $subject->getId()
);
$channel->basic_publish(new AMQPMessage(json_encode($data), $messageProperties), '', self::QUEUE_NAME);
$channel->close();
$connection->close();
ところで、私は php amqplib https://github.com/videlvaro/php-amqplibを使用しています。
助けてくれてありがとう