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

Serverless App Engine:開発シナリオ: Message Queue for Apache RocketMQ に基づいて環境分離を実行する

最終更新日:Mar 18, 2025

このトピックでは、Serverless App Engine (SAE)Message Queue for Apache RocketMQ に基づいて環境分離を実行する方法について説明します。ビジネスコードを変更することなく、非同期方式でトラフィック制御を実行できます。

背景情報

dg_rocket_mq_workflow

  • Message Queue for Apache RocketMQ 4.2.0 以降のバージョンがサポートされています。

  • プルモードとプッシュモードがサポートされています。

  • サーバーで enablePropertyFilter=true 設定を構成し、サーバーを再起動する必要があります。

準備

SAE デモアプリケーションをデプロイする

  1. デモ をダウンロードします。

  2. バックボーンアプリケーションをデプロイします。

    アプリケーション A、アプリケーション B、アプリケーション C のバックボーンアプリケーションをデプロイします。詳細な操作については、「アプリケーションのサービス登録および検出センターを Nacos に変更する」をご参照ください。

  3. カナリアアプリケーション (A-gray、B-gray、C-gray) をデプロイし、起動コマンドに起動パラメーター -Dalicloud.service.tag=gray を追加して、バックボーンアプリケーションと区別します。

説明

デプロイ時に独立したレジストリを使用する必要がある場合は、起動パラメーター -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false を追加する必要があります。

Rocketmq をデプロイする

  • カナリアリリースは、メッセージのプロデューサーとコンシューマーの両方で RocketMQ ベースのカナリアリリース機能を有効にした場合にのみ、メッセージに有効になります。 RocketMQ メッセージのみがカナリアリリース機能をサポートしています。 RocketMQ メッセージには、Apache RocketMQ メッセージと Message Queue for Apache RocketMQ メッセージが含まれます。

    • Apache RocketMQ メッセージを使用する場合、RocketMQ Server と RocketMQ Client のバージョンは 4.5.0 以降である必要があります。詳細については、「Apache RocketMQ」をご参照ください。

    • Message Queue for Apache RocketMQ メッセージを使用する場合は、Enterprise Platinum Edition と ons-client 1.8.0.Final 以降を使用する必要があります。詳細については、「概要」をご参照ください。

  • RocketMQ ベースのカナリアリリース機能を有効にすると、SAE はメッセージのコンシューマーグループを変更します。たとえば、メッセージのコンシューマーグループ名が group1 で、環境タグが gray の場合、RocketMQ ベースのカナリアリリース機能を有効にすると、コンシューマーグループ名は group1_gray に変更されます。 Message Queue for Apache RocketMQ メッセージを使用する場合は、事前にコンシューマーグループを作成する必要があります。

  • デフォルトでは、SAE は SQL-92 を使用してメッセージをフィルタリングします。 Apache RocketMQ を使用する場合は、broker.conf ファイルで enablePropertyFilter を true に設定することにより、サーバー側で SQL-92 フィルタリングを有効にする必要があります。

手順 1: アプリケーションで RocketMQ ベースのカナリアリリース機能を有効にする

デモの spring-cloud-c アプリケーションと spring-cloud-a アプリケーションは、メッセージのプロデューサーとコンシューマーです。 -Dprofiler.micro.service.mq.gray.enable=trueSAE で起動パラメーター () を追加して、アプリケーションで RocketMQ ベースのカナリアリリース機能を有効にすることができます。

説明

アプリケーションで RocketMQ ベースのカナリアリリース機能を有効または無効にした後、SAE コンソール でアプリケーションを再デプロイして変更を検証する必要があります。

手順 2: トラフィックを取り込み、検証を実行する

次の図は、このデモの構造を示しています。アプリケーション呼び出しには、Spring Cloud サービス呼び出しと Dubbo サービス呼び出しが含まれます。 Spring Cloud と Dubbo は、市場で最も一般的に使用されている 2 つのマイクロサービスフレームワークです。 spring-cloud-c は spring-cloud-a 用の RocketMQ メッセージを生成します。メッセージが spring-cloud-a によって消費されると、新しい呼び出しが開始されます。次の図は、Spring Cloud、Dubbo、および RocketMQ の基本的な標準的な使用方法を示しています。

dg_implement_end_to_end_canary_release_via_rocket_mq

アプリケーションをデプロイする前に、デモの呼び出しプロセスを理解することをお勧めします。呼び出しプロセスでは、spring-cloud-zuul は /A/dubbo からリクエストを受信し、spring-cloud-a に転送します。次に、spring-cloud-a は Dubbo プロトコルを使用して spring-cloud-b にアクセスし、spring-cloud-b は同じ方法で spring-cloud-c にアクセスします。 spring-cloud-c がリクエストを受信すると、メッセージが生成され、spring-cloud-c の環境タグと IP アドレスが返されます。 spring-cloud-a は生成されたメッセージを消費し、同時に Spring Cloud プロトコルを使用して spring-cloud-b を呼び出します。次に、spring-cloud-b は同じ方法で spring-cloud-c を呼び出し、ログに結果を表示します。

# /A/dubbo にアクセスすると、
# 戻り値は A[10.25.xx.xx] -> B[10.25.xx.xx] -> C[10.25.xx.xx] です。
# 同時に、spring-cloud-a はメッセージを受信し、次のログを返します。
c.a.mse.demo.service.MqConsumer: topic:TEST_MQ,producer:C[10.25.xx.xx],invoke result:A[10.25.xx.xx] -> B[10.25.xx.xx] -> C[10.25.xx.xx]

SAE コンソール にログインして spring-cloud-a のログを表示し、構成を検証します。ベースライン環境は、カナリアリリース環境とベースライン環境から生成されたメッセージを消費できます。カナリアリリース環境またはベースライン環境からの Spring Cloud 呼び出しは、ダウンストリームのカナリアリリース環境またはベースライン環境にルーティングされます。