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

Microservices Engine:Message Queue for Apache RocketMQ に基づくエンドツーエンドカナリアリリースを実装する

最終更新日:Nov 09, 2025

メッセージキューを含む非同期シナリオでのトラフィック制御により、ビジネスコードを変更することなくエンドツーエンドカナリアリリースを実装できます。このトピックでは、Microservices Engine (MSE) を使用して Message Queue for Apache RocketMQ に基づくエンドツーエンドカナリアリリースを実装する方法について説明します。

前提条件

デモアーキテクチャ

このトピックでは、Container Service for Kubernetes (ACK) コンソールにデプロイされたアプリケーションを例として使用します。kubectl を使用してアプリケーションをデプロイし、実際の呼び出しチェーンをシミュレートすることもできます。次の図は、デモアプリケーションのアーキテクチャを示しています。アプリケーション間の呼び出しには、最も一般的な 2 つのマイクロサービスフレームワークである Spring Cloud と Dubbo の両方の呼び出しが含まれます。アプリケーション C は、アプリケーション A によって消費される RocketMQ メッセージを生成します。アプリケーション A がメッセージを消費すると、新しい呼び出しも開始します。これらのアプリケーションは、Spring Cloud、Dubbo、および RocketMQ の標準的な使用法に基づいています。

Calling relationship diagram

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

  • Container Service for Kubernetes (ACK) クラスター内のマイクロサービスアプリケーションに対してマイクロサービスガバナンスを有効にします。ビジネス要件に基づいて適切なメソッドを選択できます。詳細については、「ACK または ACS クラスター内の Java マイクロサービスアプリケーションに対してマイクロサービスガバナンスを有効にする」をご参照ください。

    ACK 名前空間のアプリケーションに対してマイクロサービスガバナンスを有効にする

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

    2. 左側のナビゲーションウィンドウで、Microservices Governance > Application Governance を選択します。

    3. Application list ページで、ACK Application Access をクリックします。

    4. ACK Application Access ダイアログボックスで、パラメーターを設定し、OK をクリックします。

      image

      パラメーター

      説明

      Cluster type

      ACK ClusterACK Serverless Cluster、または ACS Cluster を選択します。

      説明

      Container Service for Kubernetes が Microservices Engine を呼び出す権限を付与していない場合は、[承認してください] をクリックして権限を付与します。

      Cluster Name/ID

      MSE マイクロサービスガバナンスに接続する Cluster Name/ID の名前または ID を選択します。キーワードでクラスターを検索できます。

      ack-onepilot

      [ack-onepilot] コンポーネントのステータス。ack-onepilot コンポーネントとそのアップグレード方法の詳細については、「ack-onepilot コンポーネント」および「MSE マイクロサービスガバナンスコンポーネントのインストールとアップグレード」をご参照ください。

      • [ack-onepilot] がインストールされていない場合、クラスターを選択するとシステムによって自動的にインストールされます。「[インストールには約 1 分かかります。お待ちください。]」というメッセージが表示されます。

        RAM ユーザーを使用していて、必要な権限がない場合は、Container Service for Kubernetes コンソールにログインします。ターゲットクラスターの詳細ページに移動します。[コンポーネント管理] をクリックし、[ack-onepilot] を見つけて、[インストール] をクリックします。

      • [ack-onepilot] がインストールされている場合、コンソールには「インストール済み」と表示され、その後にバージョン番号が続きます (例: インストール済み 4.2.0)。

      説明
      • このステップでインストールされるコンポーネントは [ack-onepilot] です。Container Service for Kubernetes コンソールにログインし、ターゲットクラスターの詳細ページに移動し、[運用管理] >[コンポーネント管理] を選択して詳細を表示できます。

      • [ack-onepilot] がインストールされると、エージェントが自動的に挿入されます。これにより、アプリケーションの起動時間が最大 10 秒増加する場合があります。

      • 名前空間で接続し、ターゲットクラスターが次のリージョンのいずれにもない場合は、クラスターがインターネットにアクセスし、acm.aliyun.com:8080 に接続できることを確認してください: 青島、杭州、北京、上海、上海金融クラウド、深セン、香港 (中国)、シンガポール、フランクフルト、シドニー、シリコンバレー、バージニア。

      Access Type

      Namespace Access を選択します。

      Cluster Namespace

      Cluster Namespace を選択します。

      Microservices Governance Namespace

      Microservices Governance Namespace を選択します。

    アプリケーションのマイクロサービスガバナンスを有効にする

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

    2. 左側のナビゲーションウィンドウで、Microservices Governance > Application Governance を選択します。

    3. Application list ページで、ACK Application Access をクリックします。

    4. ACK Application Access ダイアログボックスで、パラメーターを設定し、OK をクリックします。

      image

      パラメーター

      説明

      Cluster type

      ACK ClusterACK Serverless Cluster、または ACS Cluster を選択します。

      説明

      Container Service for Kubernetes が Microservices Engine を呼び出す権限を付与していない場合は、[承認してください] をクリックして権限を付与します。

      Cluster Name/ID

      MSE マイクロサービスガバナンスに接続する Cluster Name/ID の名前または ID を選択します。キーワードでクラスターを検索できます。

      ack-onepilot

      [ack-onepilot] コンポーネントのステータス。ack-onepilot コンポーネントとそのアップグレード方法の詳細については、「ack-onepilot コンポーネント」および「MSE マイクロサービスガバナンスコンポーネントのインストールとアップグレード」をご参照ください。

      • [ack-onepilot] がインストールされていない場合、クラスターを選択するとシステムによって自動的にインストールされます。「[インストールには約 1 分かかります。お待ちください。]」というメッセージが表示されます。

        RAM ユーザーを使用していて、必要な権限がない場合は、Container Service for Kubernetes コンソールにログインします。ターゲットクラスターの詳細ページに移動します。[コンポーネント管理] をクリックし、[ack-onepilot] を見つけて、[インストール] をクリックします。

      • [ack-onepilot] がインストールされている場合、コンソールには「インストール済み」と表示され、その後にバージョン番号が続きます (例: インストール済み 4.2.0)。

      説明
      • このステップでインストールされるコンポーネントは [ack-onepilot] です。Container Service for Kubernetes コンソールにログインし、ターゲットクラスターの詳細ページに移動し、[運用管理] >[コンポーネント管理] を選択して詳細を表示できます。

      • [ack-onepilot] がインストールされると、エージェントが自動的に挿入されます。これにより、アプリケーションの起動時間が最大 10 秒増加する場合があります。

      • 名前空間で接続し、ターゲットクラスターが次のリージョンのいずれにもない場合は、クラスターがインターネットにアクセスし、acm.aliyun.com:8080 に接続できることを確認してください: 青島、杭州、北京、上海、上海金融クラウド、深セン、香港 (中国)、シンガポール、フランクフルト、シドニー、シリコンバレー、バージニア。

      Access Type

      Single Application Access を選択します。

      Access Procedure

      ステップに従います。

      [ステップ 1: クラスターの [ワークロード] > [デプロイメント] ページに移動し、アプリケーションの名前空間に切り替えます]

      [ステップ 2: 接続するアプリケーションを見つけて、[YAML で表示] をクリックします]

      [ステップ 3: 次のフォーマットでラベルを編集し、[更新] をクリックします]

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

ステップ 2: アプリケーションをデプロイする

spring-cloud-zuul、spring-cloud-a、spring-cloud-b、spring-cloud-c アプリケーションを、Nacos サーバーおよび 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 はメッセージを生成し、その環境タグと IP アドレスを返します。これらのメッセージは、spring-cloud-a アプリケーションによって消費されます。メッセージを消費するとき、spring-cloud-a は Spring Cloud を使用して spring-cloud-b を呼び出し、spring-cloud-b は spring-cloud-c を呼び出します。最後に、spring-cloud-a は結果をログに出力します。

# /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]
  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: アプリケーションの RocketMQ メッセージベースのカナリアリリースを有効にする

spring-cloud-c がメッセージプロデューサーで、spring-cloud-a がメッセージコンシューマーであると仮定します。両方のアプリケーションで RocketMQ メッセージベースのカナリアリリースを有効にします。

説明
  • RocketMQ メッセージベースのカナリアリリース機能を有効または無効にするには、変更を有効にするために ACK コンソールでアプリケーションを再デプロイする必要があります。

  • メッセージベースのカナリアリリース機能は、メッセージプロデューサーとメッセージコンシューマーの両方で有効になっている場合にのみ有効になります。

  • この機能は現在、オープンソースおよび Alibaba Cloud 商用版を含む RocketMQ メッセージのみをサポートしています。

    • オープンソースの RocketMQ を使用する場合、RocketMQ Server と RocketMQ Client の両方がバージョン 4.5.0 以降である必要があります。

    • Alibaba Cloud Message Queue for Apache RocketMQ 4.x を使用する場合、SQL92 フィルタリングを使用するには Enterprise Edition を使用する必要があります。この制限は、クライアント側のフィルタリングまたは Alibaba Cloud Message Queue for Apache RocketMQ 5.x を使用する場合には適用されません。

    • ONS クライアントを使用する場合、バージョンは 1.8.0.Final 以降である必要があります。

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

  • デフォルトでは、MSE は SQL92 構文を使用してメッセージをフィルターします。Apache RocketMQ を使用している場合は、broker.conf ファイルに enablePropertyFilter=true 構成を追加して、サーバー側で SQL92 フィルタリングを有効にする必要があります。

  • シナリオが SQL92 フィルタリングをサポートしていない場合は、FilterMessageHook を使用してコンシューマー側でメッセージをフィルターできます。このメソッドでは、すべてのアプリケーションでメッセージベースのカナリアリリースを有効にし、クライアント側のフィルタリングメソッドを選択する必要があります。コンシューマー側のフィルタリングメソッドは各環境ですべてのメッセージを処理するため、メッセージプロデューサーとコンシューマーの両方に大きな負荷がかかります。本番環境でこのメソッドを使用することはお勧めしません。

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

  2. 左側のナビゲーションウィンドウで、Microservices Governance > Application Governance を選択します。

  3. Application list ページで、目的のアプリケーションのリソースカードをクリックします。左側のナビゲーションウィンドウで、[トラフィック管理] をクリックします。

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

    image

  5. ACK コンソール ACK コンソールにログインし、アプリケーションを再デプロイして構成を適用します。

ステップ 4: 新しいバージョンのアプリケーションをデプロイする

新しいバージョンのアプリケーション spring-cloud-a-gray、spring-cloud-b-gray、spring-cloud-c-gray をデプロイします。

  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. 左側のナビゲーションウィンドウで、Microservices Governance > Application Governance を選択します。

  3. spring-cloud-a アプリケーションのリソースカードをクリックします。[アプリケーション概要] ページの [QPS トレンドグラフ] には、すべてのトラフィックがアプリケーションのベースラインバージョン (安定バージョン) にルーティングされていることが示されます。

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

    image

  5. [ラベル ルートの作成] パネルで、トラフィックルールを設定し、[OK] をクリックします。

    この例では、トラフィックルールの条件は name=xiaoming に設定されています。トラフィックルールの設定方法の詳細については、「タグベースルーティングを設定する」をご参照ください。

    image

    トラフィックルールが有効になった後、[アプリケーション概要] ページでトラフィック分散を表示できます。

  6. [タグベースルーティング] タブで、gray タグの宛先ルールの名前をクリックします。[ルールの詳細] パネルで、[編集] をクリックします。[タグベースルーティングルールの変更] パネルで、[タグ伝播] スイッチを有効にし、[OK] をクリックします。

    説明

    タグ伝播を有効にすると、name=xiaoming に一致するグレースケールトラフィックがエンドツーエンドで渡され、ルールを繰り返し設定する必要はありません。

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

  8. クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、[ネットワーク] > [サービス] を選択します。

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

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

    エンドツーエンドカナリアリリースが有効になりました。

    image

    spring-cloud-b アプリケーションのトラフィックデータは次のようになります:

    Traffic curve of the spring-cloud-b application

ステップ 6: タグベースのメッセージフィルタリングルールを調整し、結果を検証する

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

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

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

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

    [ベースライン環境で無視するタグ] パラメーターに gray を選択した場合、`gray` 環境タグを持つメッセージは `spring-cloud-a-gray` によってのみ消費され、`spring-cloud-a` では消費されません。[ベースライン環境で無視するタグ] パラメーターは、設定後に動的に有効になり、アプリケーションを再起動する必要はありません。

    説明

    デフォルトでは、ベースラインノードはすべての環境からのメッセージを消費します。ベースラインノードがタグ付けされた環境で生成されたメッセージを消費しないようにするには、[ベースライン環境で無視されるタグ] パラメーターを設定するだけで済みます。

  5. ACK コンソールにログインして、spring-cloud-a アプリケーションのログを表示し、構成を検証します。

    次の図のログは、ベースライン環境が gray 環境とベースライン環境の両方で生成されたメッセージを消費できることを示しています。[ベースライン環境で無視するタグ] パラメーターを `gray` に設定すると、ベースライン環境はベースライン環境で生成されたメッセージのみを消費します。

    Logs