3

登録された 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を使用しています。

助けてくれてありがとう

4

2 に答える 2