ホームページ > バックエンド開発 > PHPチュートリアル > Rabbitmq はコンシューマの実行が成功したかどうかをどのようにして知るのでしょうか。

Rabbitmq はコンシューマの実行が成功したかどうかをどのようにして知るのでしょうか。

WBOY
リリース: 2016-09-12 17:44:44
オリジナル
2017 人が閲覧しました

シナリオ: 注文を出し、在庫を差し引きます。
私の考えは、発注のタスクをキューに入れて一つずつ処理し、在庫を差し引くときにミスがないようにすることです。
それはプロデューサーとコンシューマーです
ユーザーが UI で [注文を送信] をクリックすると、タスクはキューに配置され、キューがタスクの結果を処理するのを待ち、結果 (成功) に基づいてページがジャンプします。または失敗)

しかし、疑問があります: キューが処理された後、結果をプロデューサーに通知するにはどうすればよいでしょうか?
RabbitMQ を例に挙げますが、誰かコードを提供できますか?

返信内容:

シナリオ: 注文を出し、在庫を差し引きます。
私の考えは、発注のタスクをキューに入れて一つずつ処理し、在庫を差し引くときにミスがないようにすることです。
それはプロデューサーとコンシューマーです
ユーザーが UI で [注文を送信] をクリックすると、タスクはキューに配置され、キューがタスクの結果を処理するのを待ち、結果 (成功) に基づいてページがジャンプします。または失敗)

しかし、疑問があります: キューが処理された後、結果をプロデューサーに通知するにはどうすればよいでしょうか?
RabbitMQ を例に挙げますが、誰かコードを提供できますか?

queneメッセージが到着したかどうか、具体的にはビジネスが正常に実行されたかどうかのみを保証できます。このメッセージキューは保証されていません。

プロデューサーはメッセージをパブリッシュした後、キュー b などの別の返信メッセージ キューをリッスンします。
コンシューマーが消費を終了した後、結果メッセージをキュー b にプッシュします。
このようにして、元のプロデューサーは返された結果を取得できます。

RabbitMQ で RPC を実装するメカニズムは次のとおりです:

  • クライアントがリクエスト(メッセージ)を送信すると、replyTo(キュー名。処理が完了した後にこのキューに通知するメッセージをサーバーに送信するように指示するために使用されます)とcorrelationId(識別番号)の2つの値が設定されます。処理が完了した後、サーバーはこの属性を返す必要があります。クライアントは、この ID に基づいてどのリクエストが正常に実行されたかを知ることができます。

  • サーバーはメッセージを受信して​​処理します
  • サーバーはメッセージを処理した後、replyToで指定されたキューにcorrelationId属性を持つ応答メッセージを生成します
  • クライアントは、replyToで指定されたQueueに予めサブスクライブしており、サーバーからの応答メッセージを受信後、correlationId属性に基づいてどのリクエストが実行されたかを解析し、実行結果に基づいて以降の業務処理を実行します
  • プロデューサーは別の ReplyTo キューをリッスンし、対応する応答メッセージを取得して後続の操作をトリガーすることが指摘されています。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート