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

Microservices Engine:ApsaraMQ for RocketMQ に基づくエンドツーエンドカナリアリリースの実装

最終更新日:Mar 12, 2026

標準的なカナリアリリースでは、同期的な HTTP および RPC トラフィックを新しいアプリケーションバージョンにルーティングしますが、非同期のメッセージキューはそのままです。カナリアインスタンスによって生成されたメッセージは、ベースラインのコンシューマーに到達する可能性があり、呼び出しチェーン全体のトラフィック分離が損なわれます。Microservices Engine (MSE) は、カナリアリリースを RocketMQ のメッセージフローに拡張することでこの問題を解決します。タグ付けされたトラフィックは、ビジネスコードを変更することなく、エンドツーエンドでカナリア環境内に留まります。

仕組み

MSE は、2 つのメカニズムを通じてメッセージトラフィックを分離します。

  • コンシューマーグループの分割: MSE は、各コンシューマーグループ名に環境タグを追加します。例えば、group1 という名前のコンシューマーグループは、gray 環境でタグ付けされたインスタンスの場合、group1_gray になります。各環境は独自のコンシューマーグループを取得するため、カナリアコンシューマーはカナリアメッセージのみを処理します。

  • SQL92 メッセージフィルタリング: MSE は、SQL92 フィルター式をメッセージコンシューマーに挿入します。各環境は、自身の環境ラベルを持つメッセージのみをプルします。オープンソースの Apache RocketMQ の場合、これにはブローカー設定で enablePropertyFilter=true が必要です。SQL92 フィルタリングが利用できない場合、MSE は FilterMessageHook を使用したクライアントサイドフィルタリングにフォールバックできますが、これによりプロデューサーとコンシューマーの両方の負荷が増加するため、本番環境では推奨されません。

これらのメカニズムは、同期呼び出しのタグベースルーティングと呼び出しチェーン全体でのタグ伝播と組み合わせることで、HTTP、RPC、およびメッセージキュートラフィックにまたがる完全に分離されたカナリア環境を作成します。

デモのアーキテクチャ

このデモでは、Container Service for Kubernetes (ACK) にデプロイされた 4 つのサービスからなるアプリケーションを使用します。呼び出しチェーンは、Spring Cloud、Dubbo、および RocketMQ を組み合わせて、典型的なマイクロサービスアーキテクチャを表しています。

Calling relationship diagram

同期パス/A/dubbo へのリクエストは、spring-cloud-zuul (ゲートウェイ) を通じて入り、spring-cloud-a に転送されます。spring-cloud-a は Dubbo を介して spring-cloud-b を呼び出し、spring-cloud-b は spring-cloud-c を呼び出します。

非同期パス: リクエストを処理した後、spring-cloud-c は RocketMQ メッセージを生成します。spring-cloud-a はメッセージを消費し、Spring Cloud を介して 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 は、メッセージを消費した後に非同期パスをログに記録します。

2021-12-28 10:58:50.301  INFO 1 --- [essageThread_15] 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]

デモのソースコードは GitHub リポジトリから入手してください。

前提条件

開始する前に、以下が完了していることを確認してください。

ステップ 1: アプリケーションを MSE マイクロサービスガバナンスに接続

お使いの ACK クラスターのアプリケーションに対して MSE マイクロサービスガバナンスを有効化します。以下の方法のいずれかを選択してください。詳細な手順については、「ACK または ACS クラスター内の Java マイクロサービスアプリケーション向けにマイクロサービスガバナンスを有効化する」をご参照ください。

オプション A: 名前空間による有効化

この方法では、指定された ACK 名前空間内のすべてのアプリケーションに対してガバナンスを有効にします。

  1. MSE コンソールにログインし、上部のナビゲーションバーでリージョンを選択します。

  2. 左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [アプリケーションガバナンス] を選択します。

  3. [アプリケーションリスト] ページで、[ACK アプリケーションアクセス] をクリックします。

  4. [ACK アプリケーションアクセス] ダイアログボックスで、以下のパラメーターを設定し、[OK] をクリックします。

    - ack-onepilot コンポーネントの詳細を表示するには、ACK コンソールに移動し、クラスター名をクリックして、[オペレーション] > [アドオン] を選択します。 - ack-onepilot がインストールされると、エージェントが自動的に挿入されます。アプリケーションの起動時間が最大 10 秒増加する場合があります。 - クラスターが以下のリージョンのいずれかにない場合、インターネットにアクセスでき、acm.aliyun.com:8080 に接続できる必要があります:中国 (青島)、中国 (杭州)、中国 (北京)、中国 (上海)、中国東部 2 Finance、中国 (深セン)、中国 (香港)、シンガポール、ドイツ (フランクフルト)、オーストラリア (シドニー)、米国 (シリコンバレー)、および米国 (バージニア)。
    パラメーター説明
    クラスタータイプ[ACK クラスター][ACK サーバーレスクラスター]、または [ACS クラスター] を選択します。ACK が MSE を呼び出す権限を持っていない場合は、権限付与リンクをクリックして権限を付与します。
    クラスター名/IDターゲットクラスターを選択します。クラスター名または ID で検索します。
    ack-onepilotack-onepilot コンポーネントのステータスを表示します。インストールされていない場合は、[インストールをクリック] をクリックします。ack-onepilot と「Microservices Governance コンポーネントのインストールと更新」をご参照ください。
    アクセスタイプ[名前空間アクセス] を選択します。
    ACK クラスターの名前空間有効にする名前空間を選択します。
    マイクロサービスガバナンスの名前空間MSE ガバナンスの名前空間を選択します。

    image

オプション B: 単一アプリケーションに対する有効化

この方法では、Deployment spec にラベルを追加することで、特定の 1 つのアプリケーションに対してガバナンスを有効にします。

  1. MSE コンソールにログインし、上部のナビゲーションバーでリージョンを選択します。

  2. 左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [アプリケーションガバナンス] を選択します。

  3. [アプリケーションリスト] ページで、[ACK アプリケーションアクセス] をクリックします。

  4. [ACK アプリケーションアクセス] ダイアログボックスで、以下のパラメーターを設定し、[OK] をクリックします。

    パラメーター説明
    クラスタータイプ[ACK クラスター][ACK サーバーレス Kubernetes クラスター]、または [ACS クラスター] を選択します。ACK に MSE を呼び出す権限がない場合は、権限付与の[リンク]をクリックして権限を付与します。
    クラスター名/IDターゲットクラスターを選択します。
    ack-onepilotack-onepilot コンポーネントのステータスを表示します。インストールされていない場合は、[クリックしてインストール] をクリックします。
    アクセスタイプ[単一アプリケーションアクセス] を選択します。

    image

  5. ACK コンソール ([ワークロード] > [デプロイメント] > アプリケーション名をクリック > [YAML で表示]) で Deployment YAML に以下のラベルを追加します:

       spec:
         template:
           metadata:
             labels:
               # マイクロサービスガバナンスを有効にするには "on" に設定します。二重引用符で囲む必要があります。
               msePilotAutoEnable: "on"
               # MSE ガバナンスの名前空間。存在しない場合は自動的に作成されます。
               mseNamespace: default
               # MSE ガバナンスのアプリケーション名。二重引用符で囲む必要があります。
               msePilotCreateAppName: "your-deployment-name"

ステップ 2: デモアプリケーションのデプロイ

Nacos サーバー、RocketMQ サーバー、および 4 つのビジネスアプリケーション (spring-cloud-zuul、spring-cloud-a、spring-cloud-b、spring-cloud-c) をデプロイします。

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、ご利用のクラスターの名前をクリックします。

  3. 左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。

  4. [名前空間] を選択し、[YAML から作成] をクリックします。以下の YAML を使用して、すべてのサービスをデプロイします。

    クリックして YAML ファイルを展開

       # Nacos サーバーをデプロイします。
    
       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: nacos-server
       spec:
         selector:
           matchLabels:
             app: nacos-server
         template:
           metadata:
             labels:
               app: nacos-server
           spec:
             containers:
               - env:
                   - name: MODE
                     value: "standalone"
                 image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/nacos-server:v2.1.2
                 imagePullPolicy: IfNotPresent
                 name: nacos-server
                 ports:
                   - containerPort: 8848
    
       ---
       apiVersion: v1
       kind: Service
       metadata:
         name: nacos-server
       spec:
         type: ClusterIP
         selector:
           app: nacos-server
         ports:
           - name: http
             port: 8848
             targetPort: 8848
    
       # ビジネスアプリケーションをデプロイします。
       ---
       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: spring-cloud-zuul
       spec:
         selector:
           matchLabels:
             app: spring-cloud-zuul
         template:
           metadata:
             labels:
               app: spring-cloud-zuul
               msePilotCreateAppName: spring-cloud-zuul
           spec:
             containers:
               - env:
                   - name: JAVA_HOME
                     value: /usr/lib/jvm/java-1.8-openjdk/jre
                   - name: enable.mq.invoke
                     value: 'true'
                 image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-zuul:3.0.1
                 imagePullPolicy: Always
                 name: spring-cloud-zuul
                 ports:
                   - containerPort: 20000
    
       ---
       apiVersion: v1
       kind: Service
       metadata:
         annotations:
           service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small
           service.beta.kubernetes.io/alicloud-loadbalancer-address-type: internet
         name: zuul-slb
       spec:
         ports:
           - port: 80
             protocol: TCP
             targetPort: 20000
         selector:
           app: spring-cloud-zuul
         type: LoadBalancer
       status:
         loadBalancer: {}
    
       ---
       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: spring-cloud-a
       spec:
         selector:
           matchLabels:
             app: spring-cloud-a
         template:
           metadata:
             labels:
               app: spring-cloud-a
               msePilotCreateAppName: spring-cloud-a
           spec:
             containers:
               - env:
                   - name: JAVA_HOME
                     value: /usr/lib/jvm/java-1.8-openjdk/jre
                 image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1
                 imagePullPolicy: Always
                 name: spring-cloud-a
                 ports:
                   - containerPort: 20001
                 livenessProbe:
                   tcpSocket:
                     port: 20001
                   initialDelaySeconds: 10
                   periodSeconds: 30
    
    
       ---
       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: spring-cloud-b
       spec:
         selector:
           matchLabels:
             app: spring-cloud-b
         template:
           metadata:
             labels:
               app: spring-cloud-b
               msePilotCreateAppName: spring-cloud-b
           spec:
             containers:
               - env:
                   - name: JAVA_HOME
                     value: /usr/lib/jvm/java-1.8-openjdk/jre
                 image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-b:3.0.1
                 imagePullPolicy: Always
                 name: spring-cloud-b
                 ports:
                   - containerPort: 20002
                 livenessProbe:
                   tcpSocket:
                     port: 20002
                   initialDelaySeconds: 10
                   periodSeconds: 30
    
       ---
       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: spring-cloud-c
       spec:
         selector:
           matchLabels:
             app: spring-cloud-c
         template:
           metadata:
             labels:
               app: spring-cloud-c
               msePilotCreateAppName: spring-cloud-c
           spec:
             containers:
               - env:
                   - name: JAVA_HOME
                     value: /usr/lib/jvm/java-1.8-openjdk/jre
                 image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-c:3.0.1
                 imagePullPolicy: Always
                 name: spring-cloud-c
                 ports:
                   - containerPort: 20003
                 livenessProbe:
                   tcpSocket:
                     port: 20003
                   initialDelaySeconds: 10
                   periodSeconds: 30
       ---
    
       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: rockectmq-broker
       spec:
         selector:
           matchLabels:
             app: rockectmq-broker
         template:
           metadata:
             labels:
               app: rockectmq-broker
           spec:
             containers:
               - command:
                   - sh
                   - mqbroker
                   - '-n'
                   - 'mqnamesrv:9876'
                   - '-c /home/rocketmq/rocketmq-4.9.7/conf/broker.conf'
                 env:
                   - name: ROCKETMQ_HOME
                     value: /home/rocketmq/rocketmq-4.9.7
                 image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/rocketmq:4.9.7
                 imagePullPolicy: Always
                 name: rockectmq-broker
                 ports:
                   - containerPort: 9876
                     protocol: TCP
                   - containerPort: 10911
                     protocol: TCP
                   - containerPort: 10912
                     protocol: TCP
                   - containerPort: 10909
    
       ---
    
       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: rocketmq-name-server
       spec:
         selector:
           matchLabels:
             app: rocketmq-name-server
         template:
           metadata:
             labels:
               app: rocketmq-name-server
           spec:
             containers:
               - command:
                   - sh
                   - mqnamesrv
                 env:
                   - name: ROCKETMQ_HOME
                     value: /home/rocketmq/rocketmq-4.9.7
                 image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/rocketmq:4.9.7
                 imagePullPolicy: Always
                 name: rocketmq-name-server
                 ports:
                   - containerPort: 9876
                     protocol: TCP
                   - containerPort: 10911
                     protocol: TCP
                   - containerPort: 10912
                     protocol: TCP
                   - containerPort: 10909
                     protocol: TCP
    
       ---
    
       apiVersion: v1
       kind: Service
       metadata:
         name: mqnamesrv
       spec:
         type: ClusterIP
         selector:
           app: rocketmq-name-server
         ports:
           - name: mqnamesrv-9876-9876
             port: 9876
             targetPort: 9876
  5. デプロイの確認: 期待される出力:

       kubectl get svc,deploy
       NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)        AGE
       service/kubernetes     ClusterIP      192.168.xx.xx    <none>         4xx/TCP        7d
       service/mqnamesrv      ClusterIP      192.168.xx.xx    <none>         98xx/TCP       47h
       service/nacos-server   ClusterIP      192.168.xx.xx    <none>         88xx/TCP       47h
       service/zuul-slb       LoadBalancer   192.168.xx.xx   123.56.xx.xx   80:302xxx/TCP   47h
    
       NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
       deployment.apps/nacos-server           1/1     1            1           4m
       deployment.apps/rockectmq-broker       1/1     1            1           4m
       deployment.apps/rocketmq-name-server   1/1     1            1           5m
       deployment.apps/spring-cloud-a         1/1     1            1           5m
       deployment.apps/spring-cloud-b         1/1     1            1           5m
       deployment.apps/spring-cloud-c         1/1     1            1           5m
       deployment.apps/spring-cloud-zuul      1/1     1            1           5m

ステップ 3: メッセージベースのカナリアリリースの有効化

メッセージプロデューサー (spring-cloud-c) とメッセージコンシューマー (spring-cloud-a) の両方で、メッセージベースのカナリアリリースを有効にします。この機能は、両方で有効にした場合にのみ効果があります。

事前準備

以下の要件と制限事項を確認してください。

要件詳細
再デプロイメッセージベースのカナリアリリースを有効または無効にした後、変更を有効にするには ACK コンソールでアプリケーションを再デプロイする必要があります。
サポートされるメッセージタイプRocketMQ メッセージのみ (オープンソース版および Alibaba Cloud 商用版)。
オープンソース RocketMQサーバーとクライアントの両方がバージョン 4.5.0 以降である必要があります。
ApsaraMQ for RocketMQ 4.xSQL92 フィルタリングには Enterprise Edition が必要です。この制限は、クライアントサイドフィルタリングまたは ApsaraMQ for RocketMQ 5.x には適用されません。
ONS クライアントバージョン 1.8.0.Final 以降。
コンシューマーグループ名MSE は環境タグをコンシューマーグループ名に追加します (例:group1group1_gray になります)。Alibaba Cloud ApsaraMQ for RocketMQ を使用する場合は、事前に新しいコンシューマーグループを作成してください。
SQL92 フィルタリングデフォルトで有効です。オープンソースの Apache RocketMQ の場合、broker.confenablePropertyFilter=true を追加してください。
クライアントサイドフィルタリングSQL92 フィルタリングが利用できない場合は、代わりに FilterMessageHook を使用します。これには、すべてのアプリケーションでメッセージベースのカナリアリリースを有効にし、クライアントサイドフィルタリングを選択する必要があります。すべての環境がすべてのメッセージを処理し、ローカルでフィルタリングするため、このアプローチは負荷を増加させます。本番環境では避けてください。

機能の有効化

  1. MSE コンソールにログインし、上部のナビゲーションバーでリージョンを選択します。

  2. 左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [アプリケーションガバナンス] を選択します。

  3. [アプリケーションリスト] ページで、アプリケーション (spring-cloud-c または spring-cloud-a) のリソースカードをクリックします。

  4. 左側のナビゲーションウィンドウで、[トラフィック管理] をクリックします。

  5. [メッセージグレースケール] タブで、[メッセージグレースケールを有効化] スイッチをオンにし、[OK] をクリックします。

    Enable Message Grayscale

  6. ACK コンソールにログインし、設定を有効にするためにアプリケーションを再デプロイします。

  7. もう一方のアプリケーション (spring-cloud-a または spring-cloud-c) について、ステップ 3〜6 を繰り返します。

ステップ 4: カナリアバージョンのデプロイ

3 つのアプリケーションのカナリアバージョン (spring-cloud-a-gray、spring-cloud-b-gray、spring-cloud-c-gray) をデプロイします。各カナリア Deployment はベースラインと同じコンテナイメージを使用しますが、カナリアインスタンスとして識別するために alicloud.service.tag: gray ラベルを含みます。msePilotCreateAppName ラベルはベースラインのアプリケーション名を使用するため、MSE はカナリアとベースラインを同じアプリケーションのバージョンとして扱います。

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター]」ページで、ご自分のクラスターの名前をクリックします。

  3. 左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。

  4. [名前空間] を選択し、[YAML から作成] をクリックします。以下の YAML を使用して、カナリアバージョンをデプロイします。

    クリックして YAML ファイルを展開

       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: spring-cloud-a-gray
       spec:
         selector:
           matchLabels:
             app: spring-cloud-a-gray
         template:
           metadata:
             labels:
               alicloud.service.tag: gray
               app: spring-cloud-a-gray
               msePilotCreateAppName: spring-cloud-a
           spec:
             containers:
               - env:
                   - name: JAVA_HOME
                     value: /usr/lib/jvm/java-1.8-openjdk/jre
                 image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-a:3.0.1
                 imagePullPolicy: Always
                 name: spring-cloud-a-gray
                 ports:
                   - containerPort: 20001
                 livenessProbe:
                   tcpSocket:
                     port: 20001
                   initialDelaySeconds: 10
                   periodSeconds: 30
       ---
       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: spring-cloud-b-gray
       spec:
         selector:
           matchLabels:
             app: spring-cloud-b-gray
         template:
           metadata:
             labels:
               alicloud.service.tag: gray
               app: spring-cloud-b-gray
               msePilotCreateAppName: spring-cloud-b
           spec:
             containers:
               - env:
                   - name: JAVA_HOME
                     value: /usr/lib/jvm/java-1.8-openjdk/jre
                 image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-b:3.0.1
                 imagePullPolicy: Always
                 name: spring-cloud-b-gray
                 ports:
                   - containerPort: 20002
                 livenessProbe:
                   tcpSocket:
                     port: 20002
                   initialDelaySeconds: 10
                   periodSeconds: 30
    
       ---
    
       apiVersion: apps/v1
       kind: Deployment
       metadata:
         name: spring-cloud-c-gray
       spec:
         selector:
           matchLabels:
             app: spring-cloud-c-gray
         template:
           metadata:
             labels:
               alicloud.service.tag: gray
               app: spring-cloud-c-gray
               msePilotCreateAppName: spring-cloud-c
           spec:
             containers:
               - env:
                   - name: JAVA_HOME
                     value: /usr/lib/jvm/java-1.8-openjdk/jre
                 image: registry.cn-hangzhou.aliyuncs.com/mse-governance-demo/spring-cloud-c:3.0.1
                 imagePullPolicy: Always
                 name: spring-cloud-c-gray
                 ports:
                   - containerPort: 20003
                 livenessProbe:
                   tcpSocket:
                     port: 20003
                   initialDelaySeconds: 10
                   periodSeconds: 30

ステップ 5: トラフィックルーティングの設定と結果の確認

タグベースルーティングルールの作成

  1. MSE コンソールにログインし、上部のナビゲーションバーでリージョンを選択します。

  2. 左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [アプリケーションガバナンス] を選択します。

  3. spring-cloud-a アプリケーションのリソースカードをクリックします。[アプリケーション概要] ページの [QPS トレンドグラフ] で、すべてのトラフィックがベースラインバージョンに送られていることを確認します。

  4. 左側のナビゲーションウィンドウで [トラフィックガバナンス] をクリックし、次に [タグベースルーティング] タブをクリックします。

  5. gray タグの [トラフィックルール] 列で、[追加] をクリックします。

    Tag-based Routing - Add rule

  6. [ラベル ルートの作成] パネルで、トラフィック ルールを定義し、[OK] をクリックします。 この例では、name=xiaoming のリクエストをカナリア環境にルーティングします。 利用可能な条件と演算子の詳細については、「タグベースルーティングを設定する」をご参照ください。

    Create Label Route panel

タグ伝播の有効化

タグ伝播は、カナリアタグを呼び出しチェーン全体に渡します。タグ伝播を有効にすると、ルーティングルールに一致するトラフィックがエンドツーエンドで渡され、ルールを繰り返し設定する必要がなくなります。

  1. [タグベースルーティング] タブで、gray タグのルーティングルールの名前をクリックします。

  2. [ルール詳細] パネルで、[編集] をクリックします。

  3. [タグベースルーティングルールの変更] パネルで、[タグ伝播] スイッチを有効にし、[OK] をクリックします。

エンドツーエンドカナリアリリースの確認

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. ご利用のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[ネットワーク] > [サービス] を選択します。

  3. zuul-slb サービスをクリックします。[基本情報] の下にある [外部 IP アドレス (外部 IP)] の横にあるアドレスをクリックします。

  4. サービス呼び出しページで、/A/dubbo?name=xiaoming を入力し、[呼び出し開始]をクリックします。

応答は、カナリア環境を介したエンドツーエンドのルーティングを確認します。

End-to-end canary release result

spring-cloud-b のトラフィックデータは、カナリアトラフィックがベースライントラフィックから分離されていることを確認します。

Traffic curve of the spring-cloud-b application

ステップ 6: ベースラインメッセージ消費の制御

デフォルトでは、ベースラインコンシューマーはカナリアを含むすべての環境からメッセージを受信します。ベースラインインスタンスがカナリアメッセージを消費するのを防ぐには、[ベースライン環境で無視するタグ] パラメーターを設定します。

  1. MSE コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [アプリケーションガバナンス] を選択します。spring-cloud-a アプリケーションのリソースカードをクリックします。

  3. 左側のナビゲーションウィンドウで [トラフィックガバナンス] をクリックし、次に [メッセージグレースケール] タブをクリックします。

  4. [ベースライン環境で無視するタグ] の横にある [編集] ボタンをクリックします。入力ボックスで gray を選択し、[OK] をクリックします。

この変更後、gray 環境タグを持つメッセージは、ベースラインの spring-cloud-a インスタンスではなく、spring-cloud-a-gray によってのみ消費されます。この設定はすぐに有効になり、アプリケーションの再起動は不要です。

確認

ACK コンソールで spring-cloud-a アプリケーションのログを確認します。変更前は、ベースラインは両方の環境からメッセージを消費します。[ベースライン環境で無視するタグ]gray に設定すると、ベースラインはベースライン環境で生成されたメッセージのみを消費するようになります。

Log comparison before and after configuring tags to ignore

次のステップ