All Products
Search
Document Center

Microservices Engine:Peluncuran kanari ujung ke ujung dengan RocketMQ

Last Updated:Aug 21, 2026

Anda dapat mengontrol lalu lintas dalam skenario asinkron, seperti antrian pesan, untuk menerapkan peluncuran kanari ujung ke ujung tanpa memodifikasi kode bisnis. Topik ini menjelaskan cara menggunakan MSE Microservices Governance untuk menerapkan peluncuran kanari ujung ke ujung pada aplikasi RocketMQ.

Prasyarat

Arsitektur demo

Topik ini memberikan contoh penerapan aplikasi di Konsol Container Service for Kubernetes (ACK). Anda juga dapat menggunakan kubectl untuk menerapkan aplikasi dan mensimulasikan rantai panggilan dunia nyata. Gambar berikut menunjukkan arsitektur aplikasi demo. Panggilan antaraplikasi menggunakan Spring Cloud dan Dubbo, dua framework layanan mikro paling umum. Dalam arsitektur ini, Aplikasi C menghasilkan pesan RocketMQ yang dikonsumsi oleh Aplikasi A. Saat Aplikasi A mengonsumsi pesan, ia memulai panggilan baru. Aplikasi-aplikasi ini didasarkan pada implementasi standar Spring Cloud, Dubbo, dan RocketMQ.

调用关系图

Langkah 1: Onboard aplikasi ke MSE Microservices Governance

  • Aktifkan Microservices Governance untuk aplikasi layanan mikro di kluster Container Service for Kubernetes (ACK). Anda dapat memilih metode yang sesuai berdasarkan kebutuhan bisnis Anda. Untuk informasi selengkapnya, lihat Aktifkan Microservices Governance untuk aplikasi layanan mikro Java di kluster ACK atau ACS.

    Aktifkan Microservices Governance untuk aplikasi dalam namespace ACK

    1. Login ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.

    2. Di panel navigasi kiri, pilih Microservices Governance > Application Governance.

    3. Di halaman Application list, klik ACK Application Access.

    4. Pada dialog ACK Application Access, konfigurasikan parameter dan klik OK.

      Atur Onboarding Type menjadi Namespace atau Single Application. Dari daftar drop-down Container Cluster Namespace, pilih namespace target, misalnya default. Di bidang Governance Namespace, masukkan nama untuk namespace yang sesuai.

      Parameter

      Deskripsi

      Cluster type

      Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.

      Catatan

      Jika Anda belum mengotorisasi Container Service for Kubernetes untuk memanggil MSE, klik Authorize Now untuk memberikan izin yang diperlukan.

      Cluster Name/ID

      Pilih Cluster Name/ID dari kluster yang ingin Anda hubungkan ke pusat governance MSE. Anda dapat mencari kluster berdasarkan kata kunci.

      ack-onepilot

      Menampilkan status komponen ack-onepilot. Untuk informasi lebih lanjut tentang komponen ini dan cara meningkatkannya, lihat komponen ack-onepilot dan Instal dan tingkatkan komponen governance layanan mikro MSE.

      • Jika ack-onepilot belum terinstal, sistem akan secara otomatis memulai instalasi setelah Anda memilih kluster dan menampilkan pesan "The installation process takes about 1 minute. Wait for a while."

        Jika Anda menggunakan Pengguna RAM dan menerima error izin, login ke Konsol Container Service for Kubernetes. Buka kluster target, lalu di panel navigasi kiri, klik Add-ons. Temukan ack-onepilot dan klik Install.

      • Jika ack-onepilot sudah terinstal, UI akan menampilkan versi yang terinstal, misalnya, Installed 4.2.0.

      Catatan
      • Anda dapat melihat detail komponen ack-onepilot dengan login ke Konsol Container Service for Kubernetes, buka kluster target, lalu pilih Operations > Add-ons.

      • Setelah ack-onepilot terinstal, komponen tersebut secara otomatis menyuntikkan Java agent. Hal ini dapat meningkatkan waktu startup aplikasi hingga 10 detik.

      • Saat melakukan koneksi berdasarkan namespace, jika kluster target Anda tidak berada di salah satu wilayah yang tercantum, pastikan kluster tersebut memiliki akses jaringan publik dan dapat terhubung ke acm.aliyun.com:8080: Tiongkok (Qingdao), Tiongkok (Hangzhou), Tiongkok (Beijing), Tiongkok (Shanghai), Shanghai Finance Cloud, Tiongkok (Shenzhen), Hong Kong (Tiongkok), Singapura, Jerman (Frankfurt), Australia (Sydney), AS (Silicon Valley), dan AS (Virginia).

      Access Type

      Pilih Namespace Access.

      Cluster Namespace

      Pilih Cluster Namespace.

      Microservices Governance Namespace

      Pilih Microservices Governance Namespace.

    Aktifkan Microservices Governance untuk aplikasi

    1. Login ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.

    2. Di panel navigasi kiri, pilih Microservices Governance > Application Governance.

    3. Di halaman Application list, klik ACK Application Access.

    4. Pada dialog ACK Application Access, konfigurasikan parameter dan klik OK.

      Atur Onboarding Type menjadi Single Application. Di bagian Edit Labels (YAML format), tambahkan label berikut di bawah spec.template.metadata.labels pada file YAML Deployment aplikasi: msePilotAutoEnable: "on" untuk mengaktifkan governance layanan mikro, mseNamespace: default untuk menentukan namespace MSE, dan msePilotCreateAppName: "your-deployment-name" untuk mengatur nama aplikasi. Ganti your-deployment-name dengan nama Deployment yang sebenarnya.

      Parameter

      Deskripsi

      Cluster type

      Pilih ACK Cluster, ACK Serverless Cluster, atau ACS Cluster.

      Catatan

      Jika Anda belum mengotorisasi Container Service for Kubernetes untuk memanggil MSE, klik Authorize Now untuk memberikan izin yang diperlukan.

      Cluster Name/ID

      Pilih Cluster Name/ID dari kluster yang ingin Anda hubungkan ke pusat governance MSE. Anda dapat mencari kluster berdasarkan kata kunci.

      ack-onepilot

      Menampilkan status komponen ack-onepilot. Untuk informasi lebih lanjut tentang komponen ini dan cara meningkatkannya, lihat komponen ack-onepilot dan Instal dan tingkatkan komponen governance layanan mikro MSE.

      • Jika ack-onepilot belum terinstal, sistem akan secara otomatis memulai instalasi setelah Anda memilih kluster dan menampilkan pesan "The installation process takes about 1 minute. Wait for a while."

        Jika Anda menggunakan Pengguna RAM dan menerima error izin, login ke Konsol Container Service for Kubernetes. Buka kluster target, lalu di panel navigasi kiri, klik Add-ons. Temukan ack-onepilot dan klik Install.

      • Jika ack-onepilot sudah terinstal, UI akan menampilkan versi yang terinstal, misalnya, Installed 4.2.0.

      Catatan
      • Anda dapat melihat detail komponen ack-onepilot dengan login ke Konsol Container Service for Kubernetes, buka kluster target, lalu pilih Operations > Add-ons.

      • Setelah ack-onepilot terinstal, komponen tersebut secara otomatis menyuntikkan Java agent. Hal ini dapat meningkatkan waktu startup aplikasi hingga 10 detik.

      • Saat melakukan koneksi berdasarkan namespace, jika kluster target Anda tidak berada di salah satu wilayah yang tercantum, pastikan kluster tersebut memiliki akses jaringan publik dan dapat terhubung ke acm.aliyun.com:8080: Tiongkok (Qingdao), Tiongkok (Hangzhou), Tiongkok (Beijing), Tiongkok (Shanghai), Shanghai Finance Cloud, Tiongkok (Shenzhen), Hong Kong (Tiongkok), Singapura, Jerman (Frankfurt), Australia (Sydney), AS (Silicon Valley), dan AS (Virginia).

      Access Type

      Pilih Single Application Access.

      Access Procedure

      Ikuti langkah-langkah berikut.

      Step 1: Di Konsol Container Service for Kubernetes, buka halaman Workloads > Deployments kluster Anda dan alihkan ke namespace aplikasi Anda.

      Step 2: Temukan aplikasi target dan klik Edit YAML.

      Step 3: Edit bidang labels seperti pada contoh berikut dan klik Update.

      spec:
        template:
          metadata:
            labels:
              # Setel ke "on" untuk mengaktifkan koneksi. Nilai harus diapit tanda kutip ganda.
              msePilotAutoEnable: "on"
              # Tentukan namespace governance target. Jika namespace tidak ada, akan dibuat secara otomatis.
              mseNamespace: default
              # Tentukan nama aplikasi yang akan ditampilkan di MSE. Nilai harus diapit tanda kutip ganda.
              msePilotCreateAppName: "your-deployment-name"

Langkah 2: Terapkan aplikasi

Terapkan empat aplikasi bisnis (spring-cloud-zuul, spring-cloud-a, spring-cloud-b, dan spring-cloud-c), Nacos Server untuk registrasi layanan, dan RocketMQ Server untuk pengiriman pesan. Anda dapat menemukan kode sumber komponen-komponen ini di demo ini.

Aplikasi spring-cloud-zuul meneruskan permintaan dari path /A/dubbo ke spring-cloud-a. Kemudian, spring-cloud-a menggunakan protokol Dubbo untuk memanggil spring-cloud-b, yang kemudian memanggil spring-cloud-c menggunakan protokol yang sama. Setelah menerima permintaan, spring-cloud-c menghasilkan pesan dan mengembalikan tag lingkungan serta alamat IP-nya. Pesan-pesan ini dikonsumsi oleh aplikasi spring-cloud-a. Saat mengonsumsi pesan, spring-cloud-a memanggil spring-cloud-b menggunakan Spring Cloud, yang kemudian memanggil spring-cloud-c. Hasil akhirnya ditulis ke log spring-cloud-a.

# Saat permintaan dikirim ke /A/dubbo, nilai yang dikembalikan adalah: A[10.25.xx.xx] -> B[10.25.xx.xx] -> C[10.25.xx.xx]
# Pada saat yang sama, setelah Aplikasi A menerima pesan, log berikut dihasilkan:

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. Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Cluster List, klik nama kluster tujuan atau klik Details di kolom Actions.

  3. Di panel navigasi kiri halaman manajemen kluster, pilih Workload > Deployments.

  4. Di halaman Stateless, pilih Namespaces dan klik Create from YAML. Gunakan file YAML berikut untuk menerapkan aplikasi:

    File YAML

    # Terapkan Nacos Server
    
    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
    
    # Terapkan aplikasi bisnis
    ---
    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. Jalankan perintah berikut untuk memeriksa apakah aplikasi berhasil diterapkan:

    kubectl get svc,deploy

    Output yang diharapkan:

    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

Langkah 3: Aktifkan rilis kanari pesan

Asumsikan bahwa spring-cloud-c menghasilkan pesan dan spring-cloud-a mengonsumsinya. Aktifkan rilis kanari untuk pengiriman pesan pada kedua aplikasi tersebut.

Catatan
  • Untuk mengaktifkan atau menonaktifkan fitur rilis kanari untuk pengiriman pesan, Anda harus menerapkan ulang aplikasi di Konsol ACK agar perubahan berlaku.

  • Fitur ini hanya berlaku jika diaktifkan untuk produsen pesan dan konsumen pesan.

  • Fitur ini hanya mendukung RocketMQ, termasuk Apache RocketMQ open-source dan Alibaba Cloud Message Queue for Apache RocketMQ.

    • Jika Anda menggunakan Apache RocketMQ open-source, RocketMQ Server dan RocketMQ Client harus versi 4.5.0 atau lebih baru.

    • Jika Anda menggunakan Alibaba Cloud Message Queue for Apache RocketMQ 4.x, Anda harus menggunakan Edisi Platinum untuk memfilter pesan berdasarkan ekspresi SQL-92. Pembatasan ini tidak berlaku jika Anda menggunakan filter sisi klien atau Message Queue for Apache RocketMQ 5.x.

    • Jika Anda menggunakan Ons Client, Anda harus menggunakan versi 1.8.0.Final atau lebih baru.

  • Setelah Anda mengaktifkan rilis kanari untuk pengiriman pesan, MSE memodifikasi nama kelompok konsumen. Misalnya, jika kelompok konsumen awal adalah group1 dan tag lingkungan adalah gray, kelompok konsumen baru menjadi group1_gray. Jika Anda menggunakan Alibaba Cloud Message Queue for Apache RocketMQ, Anda harus membuat kelompok baru ini terlebih dahulu.

  • Secara default, MSE menggunakan standar SQL-92 untuk memfilter pesan. Jika Anda menggunakan Apache RocketMQ open-source, Anda harus mengaktifkan filter SQL-92 di server dengan menambahkan enablePropertyFilter=true ke file broker.conf.

  • Jika skenario Anda tidak mendukung filter SQL-92, Anda dapat menggunakan kelas FilterMessageHook untuk filter sisi klien. Metode ini mengharuskan Anda mengaktifkan rilis kanari untuk pengiriman pesan dan memilih opsi filter sisi klien untuk semua aplikasi. Namun, pendekatan ini tidak disarankan untuk lingkungan produksi karena memproses semua pesan di setiap lingkungan, yang memberikan beban berat pada produsen dan konsumen.

  1. Login ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Microservices Governance > Application Governance.

  3. Di halaman Application list, klik kartu resource aplikasi yang diinginkan. Di panel navigasi kiri, klik Traffic management.

  4. Di tab Canary Release for Messaging, aktifkan sakelar dan klik OK.

    Konfigurasikan Tags Ignored by Untagged Environment menjadi gray, dan atur Message Canary Release Filter menjadi Server-side Filtering (Recommended).

  5. Di Konsol ACK, terapkan ulang aplikasi di Konsol ACK agar konfigurasi berlaku.

Langkah 4: Terapkan versi aplikasi baru

Terapkan versi kanari aplikasi: spring-cloud-a-gray, spring-cloud-b-gray, dan spring-cloud-c-gray.

  1. Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Cluster List, klik nama kluster tujuan atau klik Details di kolom Actions.

  3. Di panel navigasi kiri halaman manajemen kluster, pilih Workload > Deployments.

  4. Di halaman Stateless, pilih Namespaces dan klik Create from YAML. Gunakan file YAML berikut untuk menerapkan aplikasi:

    File 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

Langkah 5: Rutekan traffic dan verifikasi

  1. Login ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Microservices Governance > Application Governance.

  3. Klik kartu resource untuk aplikasi spring-cloud-a. Di halaman Application Overview, amati grafik QPS Trend Chart untuk memastikan semua traffic diarahkan ke lingkungan dasar aplikasi spring-cloud-a, yaitu versi stabil.

  4. Di panel navigasi kiri, klik Traffic management, lalu klik tab Tag-based Routing. Di kolom Traffic Rule untuk tag gray, klik Add.

  5. Di panel Create Tag-Based Routing, konfigurasikan aturan traffic, lalu klik OK.

    Dalam contoh ini, aturan traffic diatur ke name=xiaoming. Untuk informasi selengkapnya tentang cara mengonfigurasi aturan traffic, lihat Konfigurasi routing berbasis tag.

    Di halaman Create Tag Route, konfigurasikan pengaturan berikut:

    • Route Name: test-a

    • Application: spring-cloud-a

    • Tag: gray

    • Framework Type: Spring Cloud

    • Path: /dubbo

    • Condition Mode: Semua kondisi harus dipenuhi

    Setelah aturan traffic berlaku, Anda dapat melihat distribusi traffic di halaman Application Overview.

  6. Di tab Tag-based Routing, klik nama aturan yang terkait dengan tag gray. Di panel Rule details yang muncul, klik Edit. Di panel Edit Tag-Based Routing, aktifkan Trace Propagation dan klik OK.

    Catatan

    Setelah Anda mengaktifkan propagasi konteks, traffic kanari yang sesuai dengan aturan name=xiaoming akan menyebar ke seluruh rantai panggilan. Anda tidak perlu mengonfigurasi aturan untuk setiap aplikasi.

  7. Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  8. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Network > Services.

  9. Klik layanan zuul-slb. Di bagian Basic Information, klik alamat di samping External IP.

  10. Di halaman pemanggilan layanan, masukkan /A/dubbo?name=xiaoming dan klik Start Call.

    Peluncuran kanari ujung ke ujung kini aktif.

    Di halaman pengujian, masukkan URL /A/dubbo?name=xiaoming dan klik Start Invocation. Log pemanggilan menunjukkan semua permintaan diarahkan melalui node kanari: Agray[10.5.117.199] → Bgray[10.5.117.200] → Cgray[10.5.117.157].

    Gambar berikut menunjukkan data permintaan untuk aplikasi spring-cloud-b.

    spring cloud b应用流量曲线

Langkah 6: Sesuaikan filter tag pesan dan verifikasi

  1. Login ke Konsol MSE Microservices Governance.

  2. Di panel navigasi kiri, pilih Microservices Governance > Application Governance, lalu klik kartu resource untuk aplikasi spring-cloud-a.

  3. Di panel navigasi kiri, klik Traffic management, lalu klik tab Canary Release for Messaging.

  4. Di tab Canary Release for Messaging, klik Edit di samping Tags Ignored in Base Environment. Di kotak input, pilih gray dan klik OK.

    Memilih gray untuk parameter Tags to ignore in the base environment berarti pesan dengan tag lingkungan gray hanya dapat dikonsumsi oleh spring-cloud-a-gray dan tidak oleh spring-cloud-a. Konfigurasi untuk parameter Tags to ignore in the base environment berlaku secara dinamis, dan Anda tidak perlu melakukan restart.

    Catatan

    Secara default, node lingkungan dasar mengonsumsi pesan dari semua lingkungan. Untuk mencegahnya mengonsumsi pesan yang dihasilkan oleh lingkungan bertag tertentu, cukup konfigurasikan parameter Tags to be ignored by the base environment.

  5. Login ke Konsol ACK dan lihat log untuk aplikasi spring-cloud-a guna memverifikasi konfigurasi.

    Log menunjukkan bahwa sebelum perubahan ini, lingkungan dasar mengonsumsi pesan dari lingkungan gray dan lingkungan dasar. Setelah mengatur parameter Tags Ignored by Base Environment menjadi gray, lingkungan dasar hanya mengonsumsi pesan yang dihasilkan di lingkungan dasar.

    Di log MqConsumer container spring-cloud-a, pesan kanari dirutekan melalui Bgray→Cgray, sedangkan pesan garis dasar dirutekan melalui A→B→C, mengikuti jalur yang terpisah.

    2021-12-28 11:51:47.880  INFO 1 --- [essageThread_11] c.a.mse.demo.service.MqConsumer          : topic:TEST_MQ,producer:Cgray[10.xxx 2],invoke result:A[10.xxx,xxx100] ->
    Bgray[xxx] -> Cgray[xxx]
    
    2021-12-28 11:51:47.942  INFO 1 --- [essageThread_10] c.a.mse.demo.service.MqConsumer          : topic:TEST_MQ,producer:C[10.xxx],invoke result:A[10.xxx 00] -> B[1
    0.25.xxx] -> C[xxx 7]
    
    2021-12-28 11:51:48.783  INFO 1 --- [MessageThread_8] c.a.mse.demo.service.MqConsumer          : topic:TEST_MQ,producer:C[10.2xxx 7],invoke result:A[10.xxx] -> B[1
    0.25xxx] -> C[10.xxx 7]
    
    2021-12-28 11:51:48.885  INFO 1 --- [essageThread_12] c.a.mse.demo.service.MqConsumer          : topic:TEST_MQ,producer:Cgray[10.2xxx 2],invoke result:A[10.2xxx] ->
    Bgray[10.25 xxx] -> Cgray[10.25xxx102]
    
    2021-12-28 11:51:50.908  INFO 1 --- [essageThread_17] c.a.mse.demo.service.MqConsumer          : topic:TEST_MQ,producer:C[10.xxx.157],invoke result:A[10.2xxx 00] -> B[1
    0.25.xxx] -> C[10.2xxx57]
    
    2021-12-28 11:51:50.909  INFO 1 --- [essageThread_16] c.a.mse.demo.service.MqConsumer          : topic:TEST_MQ,producer:Cgray[10.25.xxx 2],invoke result:A[10.2xxx100] ->
    Bgray[10.xxx25] -> Cgray[10.xxx.02]
    
    2021-12-28 11:51:51.642  INFO 1 --- [essageThread_14] c.a.mse.demo.service.MqConsumer          : topic:TEST_MQ,producer:Cgray[10.25xxx],invoke result:A[10.25.xxx] ->
    Bgray[10.xxx.25] -> Cgray[10.xxx 102]
    
    2021-12-28 11:51:51.684  INFO 1 --- [essageThread_15] c.a.mse.demo.service.MqConsumer          : topic:TEST_MQ,producer:C[10.25xxx57],invoke result:A[10.xxx0] -> B[1
    0.25.xxx] -> C[10.xxx 7]
    
    2021-12-28 11:51:52.765  INFO 1 --- [essageThread_13] c.a.mse.demo.service.MqConsumer          : topic:TEST_MQ,producer:C[10.25.xxx],invoke result:A[10.25.xxx] -> B[1