PHP および MySQL でキューのメッセージ保証とメッセージ永続性を実装する方法

王林
リリース: 2023-10-15 16:20:02
オリジナル
934 人が閲覧しました

PHP および MySQL でキューのメッセージ保証とメッセージ永続性を実装する方法

PHP と MySQL でキューのメッセージ保証とメッセージ永続性を実装する方法

[はじめに]
インターネット時代、ユーザー数の増加に伴い, システムの複雑化に伴い、メッセージキューは重要なコンポーネントの 1 つになりました。メッセージキューはデカップリング、非同期処理、山取り・谷埋めなどの機能を実現し、システムの安定性や拡張性を向上させます。実際のアプリケーションでは、多くの場合、メッセージの信頼性と永続的な保存を考慮する必要があります。この記事では、PHP と MySQL でキューのメッセージ保証とメッセージ永続性を実装する方法を紹介します。

[メッセージ キューの概念]
メッセージ キューは、システム間の時間結合および空間結合の問題を解決するためによく使用される非同期通信モードです。メッセージ キューは、送信者、受信者、メッセージ キューの 3 つの部分で構成されます。送信者はメッセージを作成してメッセージ キューに送信し、受信者はメッセージ キューからメッセージを取得して消費します。メッセージ キューにより、メッセージの順序性、信頼性、耐久性のあるストレージが保証されます。

[メッセージ保証の実装]
メッセージ保証とは、主にメッセージの紛失や重複配信を防ぐためのメッセージ配信プロセスにおける信頼性の保証を指します。

  1. トランザクション モード
    PHP では、データベース トランザクションを使用して、メッセージの信頼性の高い配信を実現できます。メッセージを送信すると、メッセージがデータベースに挿入され、データベース トランザクションが開始されます。メッセージ受信後、確認処理完了後にトランザクションを送信します。受信に失敗した場合、トランザクションはロールバックされ、メッセージはメッセージ キューに再度入ります。

サンプル コードは次のとおりです。

beginTransaction(); $stmt = $pdo->prepare("INSERT INTO message_queue(content) VALUES(:content)"); $content = "Hello, Message Queue!"; $stmt->bindParam(':content', $content); $stmt->execute(); $pdo->commit(); // 接收消息 $pdo->beginTransaction(); $stmt = $pdo->prepare("SELECT * FROM message_queue LIMIT 1"); $stmt->execute(); $message = $stmt->fetch(PDO::FETCH_ASSOC); echo $message['content']; $stmt = $pdo->prepare("DELETE FROM message_queue WHERE id=:id"); $stmt->bindParam(':id', $message['id']); $stmt->execute(); $pdo->commit(); ?>
ログイン後にコピー
  1. メッセージ確認メカニズム
    メッセージ確認メカニズムとは、受信者がメッセージを処理した後、確認メッセージを送信することを意味します。メッセージキューに送信して、メッセージが正常に処理されたことを通知します。メッセージ処理が失敗した場合は、確認メッセージを送信しないことを選択できます。メッセージはメッセージ キューに再配信されます。

サンプル コードは次のとおりです。

setName('test_queue'); $queue->setFlags(AMQP_DURABLE); $queue->declare(); $queue->publish($message, '', AMQP_DURABLE); // 接收消息 $channel = new AMQPChannel(new AMQPConnection()); $queue = new AMQPQueue($channel); $queue->setName('test_queue'); $queue->setFlags(AMQP_DURABLE); $queue->declare(); $message = $queue->get(); if ($message !== false) { echo $message->getBody(); $queue->ack($message->getDeliveryTag()); } ?>
ログイン後にコピー
ログイン後にコピー

[メッセージ永続性の実装]
メッセージ永続性とは、送信時またはメッセージ キューに格納されるときのメッセージの信頼性を指します。性的保証。

  1. データベース ストレージ
    メッセージを MySQL データベースに保存し、データベースの永続化機能を使用してメッセージの信頼性を確保します。データベース テーブルを使用してメッセージ キューを表し、メッセージのステータスと内容を記録できます。

サンプル コードは次のとおりです。

prepare("INSERT INTO message_queue(content, status) VALUES(:content, :status)"); $content = "Hello, Message Queue!"; $status = 0; // 0:未处理,1:已处理 $stmt->bindParam(':content', $content); $stmt->bindParam(':status', $status); $stmt->execute(); // 接收消息 $pdo = new PDO("mysql:host=127.0.0.1;dbname=test", "username", "password"); $stmt = $pdo->prepare("SELECT * FROM message_queue WHERE status=0 LIMIT 1"); $stmt->execute(); $message = $stmt->fetch(PDO::FETCH_ASSOC); echo $message['content']; $stmt = $pdo->prepare("UPDATE message_queue SET status=1 WHERE id=:id"); $stmt->bindParam(':id', $message['id']); $stmt->execute(); ?>
ログイン後にコピー
  1. メッセージ キューの永続性
    メッセージ キューがメッセージを保存する前に、メッセージの永続性フラグを設定し、メッセージ キューを永続モードに設定すると、サービスの再起動後にメッセージが失われることがなくなります。

サンプルコードは以下のとおりです。

setName('test_queue'); $queue->setFlags(AMQP_DURABLE); $queue->declare(); $queue->publish($message, '', AMQP_DURABLE); // 接收消息 $channel = new AMQPChannel(new AMQPConnection()); $queue = new AMQPQueue($channel); $queue->setName('test_queue'); $queue->setFlags(AMQP_DURABLE); $queue->declare(); $message = $queue->get(); if ($message !== false) { echo $message->getBody(); $queue->ack($message->getDeliveryTag()); } ?>
ログイン後にコピー
ログイン後にコピー

[概要]
この記事では、PHP と MySQL でキューのメッセージ保証とメッセージの永続化を実装する方法を紹介します。トランザクション モードとメッセージ確認メカニズムにより、メッセージの信頼性の高い配信が保証されます。データベース ストレージとメッセージ キューの永続化を通じて、メッセージの永続的なストレージを実現できます。これらの方法は、開発者が安定した信頼性の高いメッセージ キュー システムを構築し、システムの信頼性と拡張性を向上させるのに役立ちます。

以上がPHP および MySQL でキューのメッセージ保証とメッセージ永続性を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!