Aktifkan rilis canary pesan untuk skenario seperti peluncuran kanari ujung ke ujung dan isolasi lingkungan pengembangan. Rilis canary pesan memperluas semantik canary ke RocketMQ dengan memberi tag setiap pesan menggunakan konteks lingkungannya, sehingga konsumen canary dan baseline hanya memproses pesan yang ditujukan untuk mereka.
Gunakan rilis canary pesan untuk:
Memverifikasi perubahan logika konsumsi secara aman. Arahkan sebagian kecil pesan ke konsumen canary untuk memvalidasi logika baru sebelum menangani traffic produksi.
Mencegah kebocoran traffic dalam peluncuran kanari ujung ke ujung. Saat konsumen pesan menghasilkan RPC downstream, pesan tanpa tag dapat keluar dari routing canary dan mencapai node produksi. Pemberian tag pada pesan menjaga seluruh rantai panggilan tetap berada dalam lingkungan yang benar.
MSE hanya mendukung rilis canary pesan untuk RocketMQ, baik edisi open-source maupun edisi komersial Alibaba Cloud.
Cara kerja
Saat produsen mengirim pesan, MSE Agent menyambungkan konteks lingkungan saat ini ke atribut pesan. Selama konsumsi, agen menyaring pesan berdasarkan konteks ini sehingga setiap konsumen hanya menerima pesan yang ditujukan untuk lingkungannya.
Klasifikasi pesan canary
Suatu pesan diklasifikasikan sebagai pesan canary dalam salah satu kondisi berikut:
Diproduksi oleh node canary. Setiap pesan yang dikirim dari produsen yang berjalan di lingkungan canary.
Diproduksi oleh node baseline yang menangani traffic canary. Saat tidak ada produsen canary, traffic canary dialihkan ke node baseline. Pesan yang diproduksi dalam kondisi fallback ini juga diklasifikasikan sebagai pesan canary.
Perilaku konsumsi default
Setelah Anda mengaktifkan rilis canary pesan:
Pesan baseline hanya dikonsumsi oleh konsumen baseline.
Pesan canary dikonsumsi oleh konsumen baseline maupun konsumen canary yang sesuai. Kedua kelompok tersebut secara independen mengonsumsi pesan canary yang sama.
Untuk membatasi pesan canary hanya dikonsumsi oleh konsumen canary, lihat Konfigurasi konsumen pesan canary.
Kompatibilitas
RocketMQ Server
| Edisi | Penyaringan sisi server | Client-Side Filtering |
|---|---|---|
| RocketMQ open-source (4.5.0 atau lebih baru) | Didukung (memerlukan enablePropertyFilter=true dalam broker.conf) | Didukung |
| Alibaba Cloud RocketMQ 4.x | Hanya Edisi Platinum | Semua edisi |
| Alibaba Cloud RocketMQ 5.x | Didukung | Didukung |
RocketMQ Client
| Klien | Versi minimum | Dukungan penyaringan |
|---|---|---|
| Ons Client (Alibaba Cloud) | 1.8.0.Final atau lebih baru (seri 1.x) | -- |
org.apache.rocketmq:rocketmq-client | 4.2.0 atau lebih baru (seri 4.x) | Sisi server dan sisi client |
org.apache.rocketmq:rocketmq-client-java | Seri 5.x (memerlukan MSE Agent 4.2.2+) | Hanya sisi server |
Untuk perbedaan antara SDK RocketMQ open-source, lihat dokumentasi resmi RocketMQ.
MSE Agent tidak mendukung pesan transaksional.
Batasan
Rilis canary pesan hanya berlaku jika diaktifkan untuk produsen dan konsumen dalam governance layanan MSE.
Setelah Anda mengaktifkan rilis canary pesan, MSE Agent memodifikasi Consumer Group setiap konsumen canary dengan menambahkan
_<tag>ke nama grup aslinya, di mana<tag>adalah tag lingkungan.Sebagai contoh, jika Consumer Group asli adalah
group1dan tag lingkungan adalahgray, maka Consumer Group berubah menjadigroup1_gray.PentingJika Anda menggunakan Alibaba Cloud RocketMQ, buat Consumer Group yang telah dimodifikasi (misalnya,
group1_gray) sebelum mengaktifkan rilis canary pesan.MSE menggunakan penyaringan SQL-92 untuk penyaringan sisi server. Jika Anda menggunakan RocketMQ open-source 4.x, atur
enablePropertyFilter=truedalambroker.confuntuk mengaktifkan dukungan SQL-92.Jika pengaturan Anda tidak mendukung penyaringan SQL-92, pilih penyaringan sisi client saat mengaktifkan rilis canary pesan. Penyaringan sisi client mengharuskan setiap lingkungan memproses semua pesan, yang meningkatkan beban pada produsen dan konsumen. Hindari penyaringan sisi client di lingkungan produksi.
Aktifkan rilis canary pesan
Sebelum memulai, pastikan Anda telah:
Memiliki aplikasi yang dikelola MSE dengan produsen dan konsumen pesan yang terhubung ke governance layanan mikro
Memiliki pengaturan RocketMQ yang didukung (lihat Kompatibilitas)
(Jika menggunakan Alibaba Cloud RocketMQ) Sebuah Consumer Group telah dibuat untuk setiap lingkungan canary.
Untuk mengaktifkan rilis canary pesan:
-
Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
-
Di panel navigasi kiri, pilih Microservices Governance > Application Governance.
-
Pada halaman Application list, klik kartu resource aplikasi yang diinginkan. Di panel navigasi kiri, klik Traffic management.
Klik tab Message grayscale.
Di samping Open message grayscale, klik Edit. Konfigurasikan metode penyaringan dan aturan konsumsi, lalu klik OK.
CatatanSetelah mengubah pengaturan rilis canary pesan, restart semua node aplikasi agar perubahan berlaku. Hal ini berlaku baik untuk penyaringan sisi server maupun sisi client.
CatatanRilis canary pesan merupakan sub-fitur dari peluncuran kanari ujung ke ujung. Untuk hasil terbaik, konfigurasikan juga kemampuan peluncuran kanari ujung ke ujung terkait.
Konfigurasi konsumen pesan canary
Secara default, konsumen baseline dan canary sama-sama menerima pesan canary. Untuk membatasi pesan canary hanya dikonsumsi oleh konsumen canary, kosongkan centang kotak Baseline Consumer untuk tag yang sesuai.
Setelah perubahan ini, konsumen baseline hanya memproses pesan baseline dan pesan canary yang secara eksplisit dipilih untuk dikonsumsi oleh konsumen baseline.
-
Masuk ke Konsol MSE, lalu pilih wilayah di bilah navigasi atas.
-
Di panel navigasi kiri, pilih Microservices Governance > Application Governance.
-
Pada halaman Application list, klik kartu resource aplikasi yang diinginkan. Di panel navigasi kiri, klik Traffic management.
Klik tab Message grayscale.
Pada bagian Message Canary Release Configuration, klik Edit. Kosongkan centang kotak Baseline Consumer untuk tag yang sesuai, lalu klik OK.
Perubahan aturan konsumsi berlaku secara dinamis tanpa perlu restart aplikasi. Namun, jika semua konsumen canary offline sementara kotak centang Baseline Consumer dikosongkan, pesan canary dengan tag tersebut tidak akan dikonsumsi.
Alur kerja rilis canary
Konsumen canary permanen
Gunakan alur kerja ini ketika konsumen canary berjalan terus-menerus bersama konsumen baseline. Satu konfigurasi menjaga agar pesan canary diarahkan ke konsumen canary dan pesan baseline diarahkan ke konsumen baseline.
Jika pesan Anda tidak idempoten, pastikan konsumen canary dan baseline hanya memproses pesan masing-masing. Ikuti langkah-langkah di bawah ini.
Sebelum memulai, pastikan Anda telah:
Aplikasi produsen dan konsumen pesan terhubung ke governance layanan mikro
Rilis canary pesan diaktifkan, dan semua node aplikasi telah direstart
Langkah-langkah:
Konfigurasikan aturan konsumsi untuk aplikasi konsumen. Untuk tag canary, kosongkan centang kotak Baseline Consumer.
Tunggu 1 hingga 3 menit agar hubungan langganan di sisi RocketMQ diperbarui.
Nyalakan node konsumen canary.
Nyalakan node produsen canary untuk mulai mengirim pesan canary.
Konsumen canary dinamis
Gunakan alur kerja ini ketika node canary bersifat temporary dan terkait dengan iterasi rilis tertentu. Karena konsumen canary mungkin offline setelah verifikasi, sesuaikan penyaringan konsumen baseline untuk mencegah akumulasi atau loss pesan.
Prosedur rilis:
Konfigurasikan aturan konsumsi untuk aplikasi konsumen. Untuk tag canary, kosongkan centang kotak Baseline Consumer agar pesan canary hanya dikonsumsi oleh konsumen canary. Tunggu 1 hingga 3 menit agar hubungan langganan di sisi RocketMQ diperbarui.
Nyalakan node konsumen canary.
Kirim pesan canary dari node produsen canary.
Verifikasi pesan canary.
Matikan node produsen canary.
Bandingkan offset kelompok konsumen. Pastikan
offsetconsumer_groupbaseline kurang dari atau sama denganoffsetconsumer_groupcanary. Gunakan log dan pemantauan untuk memastikan semua pesan canary telah dikonsumsi.PentingJika offset
consumer_groupbaseline kurang dari atau sama dengan offsetconsumer_groupcanary, konsumen baseline dapat dengan aman mengambil pesan canary yang tersisa. Beberapa pesan mungkin dikonsumsi dua kali — pastikan logika bisnis Anda menangani idempotensi.Jika offset baseline lebih besar daripada offset canary, melanjutkan ke langkah berikutnya menyebabkan kehilangan pesan canary. Tunggu hingga offset tersebut sejajar.
Aktifkan kembali konsumsi baseline. Untuk tag canary, centang kotak Baseline Consumer agar konsumen baseline dapat memproses pesan canary yang tersisa. Tunggu 1 hingga 3 menit agar hubungan langganan diperbarui.
Matikan node konsumen canary dan hapus
consumer_groupcanary.PentingJika Anda tidak menghapus
consumer_groupcanary, pesan akan terakumulasi di grup tersebut. Saat konsumen canary berikutnya online, mereka melanjutkan konsumsi dari offset terakhir yang terekam, bukan dari posisi terbaru.