すべてのプロダクト
Search
ドキュメントセンター

:メッセージ消費に関するFAQ

最終更新日:Sep 25, 2024

クライアントを初めてブローカーに接続したときに接続が失敗する問題をトラブルシューティングするにはどうすればよいですか?

次の設定が有効かどうかを確認します。

  • エンドポイントが正しく指定されているかどうかを確認します。 エンドポイントは、ApsaraMQ for RocketMQコンソールインスタンスの詳細 ページで取得できます。

  • telnet Endpoint from the domain name and port numberコマンドを実行して、ネットワーク接続を確認します。

    • アプリケーションがオンプレミスマシンにデプロイされている場合、または複数のリージョンでApsaraMQ for RocketMQにアクセスするが、Cloud Enterprise network (CEN) を使用してネットワークを構築できない場合は、パブリックエンドポイントを使用してApsaraMQ for RocketMQインスタンスにアクセスする必要があります。 パブリックエンドポイントを使用してApsaraMQ for RocketMQインスタンスにアクセスする場合、アウトバウンドインターネットトラフィックに対して課金されます。 詳細については、「ApsaraMQ For RocketMQ 4.xインスタンスのインターネットアクセス料金」または「ApsaraMQ for RocketMQ 5.xインスタンスのインターネットアクセス料金」をご参照ください。

    • アプリケーションがAlibaba Cloud Elastic Compute Service (ECS) インスタンスにデプロイされている場合、仮想プライベートクラウド (VPC) エンドポイントを使用して、VPC内のApsaraMQ for RocketMQインスタンスにアクセスできます。 この場合、ECSインスタンスがApsaraMQ for RocketMQインスタンスと同じリージョンにあることを確認する必要があります。

  • ApsaraMQ for RocketMQ 5.0インスタンスのインターネットアクセス機能を有効にした場合、IPアドレスホワイトリストが設定されているかどうかを確認します。 インターネットアクセス機能を有効にすると、デフォルトで任意のIPアドレスからApsaraMQ for RocketMQにアクセスできます。 IPアドレスホワイトリストを指定した場合、ホワイトリストのIPアドレスからのみApsaraMQ for RocketMQにアクセスできます。

  • トピック名が正しく指定されているか確認してください。 トピックがApsaraMQ for RocketMQコンソールで作成され、トピック名に余分なスペースや特殊文字が含まれていないことを確認してください。

  • ユーザー名とパスワードが正しく指定されているかどうかを確認します。

    • ApsaraMQ for RocketMQ 5.0インスタンス: インスタンスのユーザー名とパスワードを指定する必要があります。 ApsaraMQ for RocketMQコンソールの [インスタンスの詳細] ページで、インスタンスのユーザー名とパスワードを取得できます。

    • ApsaraMQ for RocketMQ 4.0インスタンス: Alibaba CloudアカウントまたはResource Access Management (RAM) ユーザーのAccessKey IDとAccessKeyシークレットを指定する必要があります。 RAMユーザーを使用する場合は、RAMユーザーに必要な権限が付与されていることを確認してください。 AccessKeyペアの取得方法については、「AccessKeyペアの作成」をご参照ください。

サブスクリプションに一貫性がない場合はどうすればよいですか?

ApsaraMQ for RocketMQコンソールにログインします。 グループ ページで、問題が発生したコンシューマーグループのサブスクリプションとコンシューマーを表示します。 次に、サブスクリプションに矛盾があるコンシューマーのサブスクリプションコードを変更します。

蓄積されたメッセージを処理する方法?

次の原因でメッセージが蓄積されることがあります。

  • メッセージ消費ロジックで例外が発生しました。

  • メッセージを生成するアプリケーションでトラフィックのスパイクが発生しました。 この場合、メッセージ生成の速度は、メッセージ消費の速度をはるかに超え、メッセージの蓄積を引き起こす。

  • コンシューマが依存するダウンストリームサービスの処理期間が延長され、消費スレッドがブロックされます。

  • 不十分な消費スレッドは、低レベルの消費同時性を引き起こす。 その結果、メッセージ消費はメッセージ生成よりも遅れる。

例外の原因を特定するには、クライアントのログまたはスタック情報を確認する必要があります。 詳細については、「蓄積されたメッセージを処理する方法?」をご参照ください。

コンシューマーがメッセージを消費できない場合はどうすればよいですか?

  1. ApsaraMQ for RocketMQコンソールにログインします。 グループ ページで、コンシューマーがオンラインかどうか、およびクライアント接続が正常かどうかを確認します。 クライアントが接続されていない場合は、クライアントログを確認し、エラーに基づいて例外のトラブルシューティングを行います。

  2. サブスクリプションが一貫しているかどうかを確認します。 サブスクリプションに一貫性がない場合は、サブスクリプションの配布に基づいてサブスクリプションに一貫性がないコンシューマークライアントを見つけ、コンシューマークライアントのサブスクリプションコードを変更します。

コンシューマーグループが実行されているマシンが失敗して再起動すると、メッセージは失われますか?

ApsaraMQ for RocketMQは、永続サブスクリプションを提供します。 コンシューマグループがオフラインになった場合、または消費例外が発生した場合、メッセージは失われません。 消費者クライアントがブローカーに再接続された後、消費者は、クライアントが切断される前に消費者が中断したオフセットからのメッセージを消費することができる。

メッセージをサブスクライブするときに、タグを指定するために使用されるパラメーターを空のままにすることはできますか?

いいえ。 メッセージをサブスクライブするときにタグを指定するために使用するパラメーターを空のままにすると、コンシューマーはメッセージを使用できません。 トピック内のすべてのメッセージをサブスクライブする場合は、パラメーターを * に設定する必要があります。 サンプルコード:

String topic = "Your Topic";
// Use tags to filter messages and subscribe to all messages. 
FilterExpression filterExpression = new FilterExpression("*", FilterExpressionType.TAG);
pushConsumer.subscribe(topic, filterExpression);

詳細については、「タグベースのフィルタリング」をご参照ください。

既存のトピックをサブスクライブするコンシューマーグループを作成する場合、コンシューマーオフセットを設定する方法を教えてください。

コンシューマーグループを作成するとき、新しいトピックまたは既存のトピックのどちらをサブスクライブしても、コンシューマーオフセットを設定することはできません。 コンシューマが初めて起動された場合、デフォルトでは、格納された最も古いメッセージから消費が開始されます。

コンシューマーが初めて起動しない場合は、ApsaraMQ for RocketMQコンソールでコンシューマーオフセットをリセットできます。 詳細については、「コンシューマオフセットのリセット」をご参照ください。

オンライン消費者がメッセージを消費しなかったにもかかわらず、メッセージがグループに蓄積された場合はどうすればよいですか?

トピックをサブスクライブするために、コンシューマーが属するグループによって使用されている方法を確認します。 グループがメッセージフィルタリング方法を使用してトピックをサブスクライブした場合、フィルタリング条件を満たさないメッセージが蓄積されます。 この場合、メッセージの蓄積は正常です。 詳細については、「メッセージのフィルタリング」をご参照ください。

次の項目では、SQLフィルタリングとタグベースのフィルタリングを使用してメッセージをフィルタリングする場合のメッセージの蓄積数の計算方法について説明します。

image
  • SQLフィルタリング: 累積メッセージ数=準備完了メッセージ数 + 機内メッセージ数-フィルタリング条件を満たさないメッセージ数

  • タグベースのフィルタリング: 累積メッセージ数=(準備完了メッセージ数 + 機内メッセージ数) × タグに一致するメッセージの割合

説明

タグに一致するメッセージの割合=サンプル内のタグに一致するメッセージの数 /サンプリングされたメッセージの総数