このトピックでは、ApsaraMQ for RocketMQのトピックの定義、モデル関係、内部属性、動作制約、バージョン互換性、および使用法に関する注意事項について説明します。
定義
ApsaraMQ for RocketMQでは、トピックはメッセージの送信と保存に使用されるトップレベルのコンテナーです。 トピック内のメッセージは同じ消費ロジックを使用します。
トピックは次の利点を提供します。
メッセージの分類と分離
ApsaraMQ for RocketMQを使用する場合は、異なるトピックを使用して、分離ストレージとサブスクリプションの異なるビジネスタイプのメッセージを管理することを推奨します。
IDと権限の管理
ApsaraMQ for RocketMQのメッセージは匿名です。 トピックを使用して、特定のカテゴリのメッセージのIDおよび権限管理を実行できます。
モデル関係
次の図は、ApsaraMQ for RocketMQのドメインモデルにおけるトピックの位置を示しています。
ApsaraMQ for RocketMQでは、トピックはすべてのメッセージリソースが定義されているトップレベルのストレージコンテナです。 トピックは、メッセージを格納する実際の単位ではなく、論理的な概念です。
トピックには、メッセージの保存とスケーリングを容易にする1つ以上のキューが含まれます。 トピックのすべての制約と属性設定は、トピック内のキューに基づいて実装されます。
内部属性
行動の制約
強制メッセージタイプの検証
ApsaraMQ for RocketMQ 5.xでは、メッセージタイプはトピックごとに管理および処理されます。 送信されたメッセージのタイプが、トピックに定義されているメッセージタイプに対して強制的に検証されます。 検証が失敗した場合、メッセージ配信要求は拒否され、型不一致エラーが返されます。 次の検証ルールが適用されます。
メッセージタイプは一貫している必要があります
送信されるメッセージのタイプは、宛先トピックに指定されているメッセージタイプと同じである必要があります。
トピックに送信されるメッセージの種類は1つだけです。
トピックに送信できるメッセージの種類は1つだけです。
不正な使用の例
トピックのメッセージタイプと一致しないメッセージを送信する
たとえば、通常のメッセージタイプはトピックに指定されていますが、トランザクションメッセージはトピックに送信されます。 この場合、メッセージ送信要求は拒否され、メッセージタイプ不一致エラーが返されます。
異なるタイプのメッセージをトピックに送信する
たとえば、通常のメッセージタイプはトピックに指定されていますが、通常のメッセージと順序付けられたメッセージはトピックに送信されます。 この場合、順序付けられたメッセージに対応する要求は拒否され、メッセージタイプ不一致エラーが返されます。
バージョンの互換性
強制的なメッセージタイプの検証は、ApsaraMQ for RocketMQ 5.xブローカーでのみ有効です。
ApsaraMQ for RocketMQ 4.xブローカーを使用する場合、強制的なメッセージタイプの検証を実行しなくても、送信されるメッセージのタイプをトピックに定義されたメッセージタイプと一致させることを推奨します。
使用上の注意
ビジネス要件に基づいてトピックを計画する
ApsaraMQ for RocketMQでトピックを計画する場合、1つのトピックを使用して、同じ属性を持つメッセージを処理します。 トピックを計画するときは、次の点に注意してください。
メッセージの種類: さまざまなトピックを使用して、さまざまな種類のメッセージを管理します。 たとえば、2つのトピックを作成して、順序付けられたメッセージと通常のメッセージを別々に管理できます。
メッセージ相関: 直接相関しないメッセージを管理するには、個別のトピックを使用します。 たとえば、TaobaoトランザクションメッセージとFreshippoロジスティクスメッセージの2つのトピックを作成します。 メッセージが直接関連付けられている場合は、同じトピックを使用できます。 たとえば、淘宝網で紳士服と婦人服の注文メッセージに1つのトピックを作成できます。 ビジネスボリュームまたはサブモジュールにきめ細かいトピックが必要な場合は、さらに分類できるメッセージにさまざまなトピックを使用できます。 たとえば、淘宝網で紳士服と婦人服用に作成されたメッセージの2つのトピックを作成できます。
メッセージの量と適時性: 異なるトピックを使用して、量や適時性が異なるメッセージを処理します。 たとえば、少数の時間依存メッセージを生成するサービスと、何兆ものメッセージを生成するサービスには、同じトピックを使用しないでください。 これにより、時間に敏感なメッセージの待ち時間が長くなるのを防ぎます。
正しいトピック計画の例: eコマースシナリオでは、注文の作成、支払い、キャンセルメッセージなどの注文関連メッセージのトピック、物流メッセージのトピック、報酬ポイント関連メッセージのトピックを使用できます。
誤ったトピック計画の例:
過度に粗い粒度: これは、不十分な分離を引き起こし、独立したO&Mおよび障害処理を妨げる。 たとえば、すべてのトランザクションメッセージと物流メッセージに同じトピックを使用します。
過度に細かい粒度: これは、多数のトピックリソースを消費し、システム負荷を増加させる。 たとえば、ユーザーごとに生成されるメッセージには個別のトピックを使用します。
トピックを使用して同じタイプのメッセージを送受信する
トピックベースのビジネス分離は、ApsaraMQ for RocketMQの設計原則です。 異なるビジネスロジックを使用するメッセージには、異なるトピックを使用することを推奨します。 各トピックは、特定のタイプのメッセージを送受信するために使用できます。
トピックの自動管理を防ぐ
ApsaraMQ for RocketMQのトピックは、個別の権限管理、可観測性メトリクス収集、およびモニタリング機能を提供するトップレベルのリソースおよびコンテナです。 トピックを作成および管理するには、システムリソースが必要です。 操作が必要な場合にのみ、本番環境でトピックを追加、削除、変更、およびクエリすることをお勧めします。