このトピックでは、ApsaraMQ for RocketMQのサブスクリプションの定義、モデル関係、内部属性、および使用法に関する注意事項について説明します。
定義
サブスクリプションは、コンシューマがApsaraMQ for RocketMQでメッセージを取得および処理するためのルールおよびステータス設定です。
サブスクリプションは、消費者グループによってブローカーに動的に登録されます。 メッセージは、サブスクリプションによって定義されたフィルタルールに基づいて照合され、消費されます。
サブスクリプションを設定することで、次のメッセージング動作を制御できます。
メッセージフィルタールール: これらのルールは、トピック内のどのメッセージがコンシューマーによって使用されるかを定義するために使用されます。 メッセージフィルタールールを設定することで、コンシューマーは必要なメッセージを効果的に取得し、さまざまなビジネスシナリオに基づいてメッセージ受信範囲を指定できます。 詳細については、「メッセージのフィルタリング」をご参照ください。
消費ステータス: デフォルトでは、ApsaraMQ for RocketMQブローカーは永続サブスクリプションを提供します。 言い換えれば、消費者グループがブローカーに加入した後、グループ内の消費者は、再接続後に消費者が中断したところからメッセージを消費し続けることができる。
サブスクリプションを決定するためのルール
ApsaraMQ for RocketMQのサブスクリプションは、消費者グループとトピックに基づいて設計されています。 したがって、サブスクリプションとは、指定されたコンシューマーグループのトピックへのサブスクリプションを指します。 サブスクリプションを決定するためのルールを次に示します。
多くの購読者に1つのトピック
次の図は、トピックAにサブスクライブされている2つのコンシューマーグループ (グループAとグループB) を示しています。
複数のトピックへの1人の加入者
次の図は、トピックaとトピックBの2つのトピックをサブスクライブしている消費者グループ (グループA) を示しています。グループAの消費者には、トピックAとトピックBの2つの個別のサブスクリプションがあります。
モデル関係
次の図は、ApsaraMQ for RocketMQのドメインモデルでのサブスクリプションの位置を示しています。
プロデューサーはメッセージを生成し、ApsaraMQ for RocketMQブローカーに送信します。
ApsaraMQ for RocketMQブローカーは、トピックで指定されたキューにメッセージを受信順に格納します。
コンシューマーは、指定されたサブスクリプションに基づいて、ApsaraMQ for RocketMQブローカーからメッセージを取得して消費します。
内部属性
フィルタータイプ
定義: メッセージフィルタールールの型。 サブスクリプションにメッセージフィルタールールが設定された後、システムはフィルタールールに基づいてトピック内のメッセージを照合します。 条件を満たすメッセージのみが消費者に配信されます。 この機能は、要件に基づいて消費者に送信されたメッセージを分類するのに役立ちます。
値:
タグフィルター: タグ文字列に基づいてフルテキストをフィルター処理し、照合します。
SQL92フィルター: SQL構文に基づいてメッセージ属性をフィルター処理し、照合します。
フィルター式
定義: カスタムフィルタールールの式。
値: 詳細については、「フィルター式の構文」をご参照ください。
行動の制約
サブスクリプションの一貫性
ApsaraMQ for RocketMQは、消費者グループに基づいてサブスクリプションを管理します。 したがって、同じコンシューマグループ内のコンシューマは、同じ消費ロジックを維持する必要があります。 そうしないと、消費の競合が発生し、一部のメッセージが誤って消費されます。
正しい例
//Consumer c1 Consumer c1 = ConsumerBuilder.build(groupA); c1.subscribe(topicA,"TagA"); //Consumer c2 Consumer c2 = ConsumerBuilder.build(groupA); c2.subscribe(topicA,"TagA");
// コンシューマーc1の例
//Consumer c1 Consumer c1 = ConsumerBuilder.build(groupA); c1.subscribe(topicA,"TagA"); //Consumer c2 Consumer c2 = ConsumerBuilder.build(groupA); c2.subscribe(topicA,"TagB");
使用上の注意
サブスクリプションを頻繁に変更しないでください。
ApsaraMQ for RocketMQでは、サブスクリプションはメタデータと、フィルタールールや消費の進行状況などの設定に関連付けられています。 システムはまた、消費者グループ内のすべての消費者の消費行動、消費ロジック、および負荷ポリシーが一貫していることを保証しなければならない。 これらの要因は、管理する必要がある関係の複雑なウェブをもたらす。 したがって、本番環境のビジネスロジックを変更するために定期的にサブスクリプションを変更しないことをお勧めします。 そうしないと、クライアントは常に負荷分散を調整する必要があり、メッセージ受信の問題が発生します。