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

Message Queue for Apache RocketMQ 4.2.0 以降のバージョンがサポートされています。
プルモードとプッシュモードがサポートされています。
サーバーで
enablePropertyFilter=true設定を構成し、サーバーを再起動する必要があります。
準備
SAE デモアプリケーションをデプロイする
デモ をダウンロードします。
バックボーンアプリケーションをデプロイします。
アプリケーション A、アプリケーション B、アプリケーション C のバックボーンアプリケーションをデプロイします。詳細な操作については、「アプリケーションのサービス登録および検出センターを Nacos に変更する」をご参照ください。
カナリアアプリケーション (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 の基本的な標準的な使用方法を示しています。

アプリケーションをデプロイする前に、デモの呼び出しプロセスを理解することをお勧めします。呼び出しプロセスでは、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 呼び出しは、ダウンストリームのカナリアリリース環境またはベースライン環境にルーティングされます。