Alibaba Cloud Simple Message Queue (SMQ、旧 MNS) は、スケーラビリティ、高効率、信頼性、セキュリティ、および可用性を実現するために設計された分散メッセージングサービスです。SMQ を使用すると、開発者はアプリケーション内の分散コンポーネント間でデータと通知を転送でき、疎結合システムの構築に役立ちます。キューベースと Topic ベースの両方のメッセージングモデルをサポートしています。
アクセス方法
SMQ は、インターネットアクセスと Virtual Private Cloud (VPC) アクセスの両方をサポートしています。VPC を使用する場合、CIDR ブロック、ルートテーブル、ゲートウェイを設定し、VPC 内の Elastic Compute Service (ECS)、ApsaraDB RDS、Server Load Balancer (SLB) などの Alibaba Cloud リソースにアクセスできます。
キューベースのメッセージングモデル
キューベースのメッセージングモデルは、信頼性の高い同時メッセージ消費を提供します。このモデルでは、キュー内の各メッセージは 1 つのクライアントのみが消費できます。
SMQ キューは回転寿司レストランに例えることができます。シェフ (プロデューサー) が寿司 (メッセージ) を準備し、コンベアベルトに乗せます。各皿 (メッセージ) は一意であり、顧客 (コンシューマー) はベルトから好みの寿司を選んで消費します。
キューベースのメッセージフロー
次の図、キューベースのメッセージフローは、キューベースのメッセージングプロセスを示しています。このフローでは、プロデューサーがキューにメッセージを送信し、コンシューマーがキューからメッセージを取得します。
図 1. キューベースのメッセージフロー
キューベースのメッセージングモデルの特徴
複数のキューモード
スタンダードキューと遅延キューの両方がサポートされています。さまざまなビジネス要件に合わせてキューパラメーターをカスタマイズします。
同時アクセスリクエスト
SMQ キューは、複数のプロデューサーとコンシューマーからの多数の同時リクエストを効率的に処理します。メッセージがキューからプルされると、指定された期間内は再度取得できません。ワークロードに基づいて同時実行設定を柔軟に調整できます。
保証されたメッセージ配信
SMQ は、キュー内の各メッセージがその有効期間中に少なくとも 1 回消費されることを保証します。SMQ は Alibaba Cloud アカウントシステムと統合してユーザー間のリソースを分離し、承認されたエンティティのみが SMQ キュー内のメッセージにアクセスできるようにします。
ログ管理
各メッセージの詳細なログを表示できます。これには、メッセージがそのライフサイクルを通じて送信、受信、または削除されたときに生成されたすべてのレコードが含まれます。詳細については、「ログ管理」をご参照ください。
Cloud Monitor
Cloud Monitor コンソールでキュー情報を表示し、アラートルールをカスタマイズします。Cloud Monitor は予期しない問題を通知します。詳細については、「Cloud Monitor」をご参照ください。
Topic ベースのメッセージングモデル
Topic ベースのメッセージングモデルは、1 対多のパブリッシュ/サブスクライブメッセージングをサポートします。SMQ Topic を使用すると、単一のパブリッシャーが複数のサブスクライバーにメッセージを送信でき、メッセージは複数のメソッドを使用して配信できます。
Topic は、複数の顧客がサブスクライブする新聞に例えることができます。新しい号が発行されると、サブスクライバー (郵便局のパートナーを含む) は、次のような受け取り方法を選択できます。
郵便配達員に新聞を自宅などの特定の住所に直接配達してもらう。
近くのニューススタンドで新聞を自分で受け取る。配達員はまず新聞をまとめてニューススタンドに配達します。
Topic ベースのメッセージフロー
Topic ベースのメッセージフローに示すように、
Topic には、異なるキューで指定された複数のサブスクリプションがあります。
メッセージが Topic に公開されると、メッセージはサブスクリプションで指定されたキューエンドポイントにプッシュされます。
サブスクリプションはメッセージフィルタリングをサポートしています。サブスクリプションにタグを指定してメッセージをフィルターできます。
サブスクリプションにタグを指定しない場合、メッセージタグを指定したかどうかに関係なく、メッセージは指定されたキューにプッシュされます。
サブスクリプションにタグを指定した場合、そのタグを持つメッセージのみが指定されたキューにプッシュされます。
図 2. Topic ベースのメッセージフロー
Topic ベースのメッセージングモデルの特徴
通知メッセージ
SMQ サーバーは、指定されたキューにメッセージをプッシュします。これにより、クライアントの不要なリクエストポーリングとリソース消費がなくなります。リソース使用量を最大化して、ビジネスニーズを満たすことができます。他のメッセージサービスクライアントに依存する必要はありません。これにより、余分なコードの導入によるシステムの不安定化を防ぎます。詳細については、「エンドポイントに送信されるリクエストに署名する」および「Topic の管理」をご参照ください。
ネットワークやその他の理由でコールバック URL が利用できない場合は、SMQ キューにメッセージをプッシュし、キューからメッセージを取得できます。キューを使用して Topic からメッセージを消費できます。詳細については、「キュー」および「1 つのプロデューサークライアントから複数のコンシューマークライアントにメッセージを送信する」をご参照ください。
1 対多
Topic に公開されたメッセージは、複数のサブスクライバークライアントにプッシュできます。SMQ は、サブスクリプションで指定されたキューにメッセージをプッシュします。メッセージが公開されると、メッセージは複数のエンドポイントにプッシュされます。これにより、メッセージ公開の原子性が保証されます。
タグベースのメッセージフィルタリング
SMQ では、タグを使用してメッセージをフィルターできます。サブスクリプションにタグを指定し、Topic からそのタグを持つメッセージのみを受信できます。SMQ は、タグが同じ場合にのみ、指定されたエンドポイントにメッセージをプッシュします。詳細については、「Topic に関する RESTful API 操作」をご参照ください。
メッセージ配信
SMQ はメッセージをキューに送信します。詳細については、「キュー」および「1 つのプロデューサークライアントから複数のコンシューマークライアントにメッセージを送信する」をご参照ください。
保証されたメッセージ配信: Topic に公開されたメッセージは、指定されたリトライポリシーとコンテンツフォーマットに基づいて、有効期間中にサブスクライバークライアントに自動的にプッシュされます。詳細については、「NotifyStrategy」をご参照ください。
メッセージフォーマット
XML: メッセージは XML フォーマットで、メッセージ本文とメッセージ属性が含まれます。
JSON: メッセージは JSON フォーマットで、メッセージ本文とメッセージ属性が含まれます。
SIMPLIFIED: メッセージ本文は、ユーザーによって公開されたメッセージです。属性情報は含まれません (これは簡略化されたフォーマット、つまりテキストフォーマットです)。詳細については、以下をご参照ください。
ログ管理
ログは、メッセージが Topic に公開され、エンドポイントにプッシュされるときに生成されます。プッシュのリトライと結果に関する情報はログに記録されます。ログを使用して、メッセージのライフサイクルを表示できます。ログ管理により、問題を簡単にトラブルシューティングできます。詳細については、「ログ管理」をご参照ください。
Cloud Monitor
Cloud Monitor はプッシュされたメッセージを記録します。1 つ以上のメッセージのプッシュに失敗した場合、Cloud Monitor ではアラートルールを作成して例外を追跡できます。詳細については、「Cloud Monitor」をご参照ください。