Anda dapat menggunakan templat pembersihan data yang disediakan oleh Function Compute untuk memproses data pesan atau memodifikasi kode templat sesuai kebutuhan bisnis guna memenuhi persyaratan pembersihan kustom. Topik ini menggunakan contoh pemisahan konten pada data di ApsaraMQ for RocketMQ untuk menjelaskan jenis-jenis templat pemrosesan pesan dan cara menggunakannya.
Ikhtisar
Fitur pembersihan data menyediakan kemampuan operasional dasar berbasis Function Compute. Setelah membuat tugas pembersihan data pesan di ApsaraMQ for RocketMQ, Anda dapat masuk ke Function Compute untuk memodifikasi kode dan konfigurasi fungsi.
Operator | Deskripsi |
Message filtering | Mencocokkan konten pesan berdasarkan ekspresi reguler dan mengirim pesan yang cocok ke tujuan tertentu. Untuk informasi selengkapnya, lihat Pola event untuk aliran acara. |
Message conversion | Mengonversi konten pesan berdasarkan kondisi pencocokan string dan mengirim pesan hasil konversi ke tujuan tertentu. Misalnya, konversi huruf besar/kecil dapat dilakukan. Pesan hasil transformasi dapat dikirim ke tujuan tertentu. Untuk informasi selengkapnya, lihat Transformasi event dalam aliran acara. |
Memisahkan konten pesan berdasarkan ekspresi reguler dan mengirim pesan hasil pemisahan ke tujuan tertentu. | |
Mencocokkan konten pesan berdasarkan ekspresi reguler dan mengirim pesan yang cocok ke tujuan tertentu serta pesan yang tidak cocok ke tujuan default. | |
Memperkaya konten pesan berdasarkan sumber. Misalnya, jika konten asli pesan berisi AccountID, AccountID tersebut digunakan untuk melakukan kueri ke database dan mendapatkan wilayah pelanggan. Sistem menyisipkan wilayah pelanggan ke dalam isi pesan asli dan mengirim isi pesan tersebut ke layanan tujuan tertentu. | |
Memetakan konten pesan berdasarkan ekspresi reguler. Misalnya, sistem dapat menyamarkan bidang sensitif dalam pesan atau mengurangi ukuran pesan hingga ukuran minimum. |
Contoh
Content splitting
Sebagai contoh, Anda perlu memisahkan pesan daftar siswa asli [Jack, Male, Class 4|Alice, Female, Class 3|John, Male, Class 4] menjadi tiga pesan terpisah, lalu mengirim ketiganya ke layanan tujuan masing-masing. Untuk menerapkan hal ini, Anda dapat menggunakan operator content splitting. Pesan hasil pemisahan adalah sebagai berikut:
message:
[Jack, Male, Class 4]
message:
[Alice, Female, Class 3]
message:
[John, Male, Class 4]
Dynamic routing
Pesan berikut berisi informasi pasta gigi dari tiga merek:
message:
[BrandA, toothpaste, $12.98, 100g
BrandB, toothpaste, $7.99, 80g
BrandC, toothpaste, $1.99, 100g]Daftar tersebut perlu dikirim ke topik tujuan berdasarkan aturan dinamis kustom. Berikut penjelasan aturannya:
Kirim pesan yang dimulai dengan BrandA ke topik BrandA-item-topic dan BrandA-discount-topic.
Kirim pesan yang dimulai dengan BrandB ke topik BrandB-item-topic dan BrandB-discount-topic.
Kirim pesan lainnya ke topik Unknown-brand-topic.
Kode contoh berikut menunjukkan format JSON aturan tersebut:
{
"defaultTopic": "Unknown-brand-topic",
"rules": [
{
"regex": "^BrandA",
"targetTopics": [
"BrandA-item-topic",
"BrandA-discount-topic"
]
},
{
"regex": "^BrandB",
"targetTopics": [
"BrandB-item-topic",
"BrandB-discount-topic"
]
}
]
}Content enrichment
Pada contoh ini, sebuah Blok CIDR diperkaya. Kode contoh berikut memberikan contoh log akses suatu layanan:
{
"accountID": "164901546557****",
"hostIP": "192.168.XX.XX"
}
Kode contoh berikut menunjukkan cara melakukan kueri sumber alamat IP dan menyimpan hubungan pemetaan dalam database MySQL:
CREATE TABLE `tb_ip` (
-> `IP` VARCHAR(256) NOT NULL,
-> `Region` VARCHAR(256) NOT NULL,
-> `ISP` VARCHAR(256) NOT NULL,
-> PRIMARY KEY (`IP`)
-> );
Kode contoh berikut menunjukkan pesan hasil pemrosesan:
{
"accountID": "164901546557****",
"hostIP": "192.168.XX.XX",
"region": "beijing"
}
Content mapping
Pesan berikut berisi informasi pendaftaran karyawan suatu perusahaan.
Zhang San, Employee ID 1, 131 1111 1111
Li Si, Employee ID 2, 132 2222 2222
Wang Wu, Employee ID 3, 133 3333 3333
Nama, ID, dan nomor telepon karyawan dalam pesan di atas bersifat rahasia. Oleh karena itu, Anda perlu menyamarkan nama, ID, dan nomor telepon sebelum mengirim pesan ke layanan tujuan. Kode contoh berikut menunjukkan hasilnya:
Ja*, Employee ID *, ***********
Ma*, Employee ID *, ***********
Dav*, Employee ID *, ***********
Prosedur
1. Buat topik instans ApsaraMQ for RocketMQ
-
Masuk ke Konsol ApsaraMQ for RocketMQ. Di panel navigasi kiri, klik Instances. Di bilah menu atas, pilih Wilayah, lalu klik Create Instance.
-
Di panel Create RocketMQ Instance, pilih Instance Version, misalnya 4.0 Series. Untuk Instance Type, pilih Standard Instance. Masukkan nama instans, misalnya
test, dan deskripsi. Lalu, klik OK. -
Di halaman Instances, klik instans target. Di panel navigasi kiri halaman detail instans, klik Topics, lalu klik Create Topic.
-
Di panel Create Topic, buat dua topik bernama
source-topicdantarget-topic. Masukkan Description. Untuk Message Type, pilih Normal Message. Lalu, klik OK.CatatanAnda perlu membuat setidaknya dua topik: satu sebagai sumber event untuk mengirim pesan asli dan satu lagi sebagai target event untuk menerima data yang telah dibersihkan. Kedua topik tersebut dapat berada dalam instans RocketMQ yang sama atau berbeda.
2. Buat aliran acara (event stream)
-
Masuk ke Konsol EventBridge. Di panel navigasi kiri, klik Event Streams. Di bilah menu atas, pilih Wilayah, lalu klik Create Event Stream.
-
Di halaman Create Event Stream, konfigurasikan sumber event, aturan filter, templat pembersihan data, dan target event pada langkah Source, Filtering, Transformation, dan Sink. Lalu, klik Save.
Source dan Sink
-
Untuk Source, pilih instans ApsaraMQ for RocketMQ bernama test, dan untuk Topic, pilih
source-topic. -
Untuk Sink, pilih instans ApsaraMQ for RocketMQ bernama test. Untuk Topic, pilih
target-topic.
Biarkan nilai konfigurasi lainnya tetap default.
Filtering
Langkah ini opsional. Biarkan pengaturan default dan klik Next.
③ Transformation
-
Select Alibaba Cloud Service: Function Compute.
-
Pilih Create Function Template: Fungsi FC baru
EventStreaming_Transform_Customized_****akan dibuat bersamaan dengan aliran acara. -
Function Template: Contoh ini menggunakan templat Content Splitting. Templat lain yang tersedia meliputi Content Mapping, Content Enrichment, dan Dynamic Routing. Pilih templat sesuai kebutuhan Anda. Templat-templat ini menyediakan logika pemrosesan data dasar yang dapat langsung digunakan atau dikustomisasi.
Nama fungsi dibuat secara otomatis dengan format
EventStreaming_Transform_Split_diikuti akhiran tertentu. Kode templat mendekode event menggunakan UTF-8, lalu mengurai array pesan menggunakanast.literal_evaldanjson.loads. Jika konfigurasi valid, label hijau Valid Configuration akan muncul di bagian atas halaman. -
3. Uji dan verifikasi
3.1 Kirim pesan asli di topik instans RocketMQ sumber
-
Masuk ke Konsol Message Queue for Apache RocketMQ, temukan topik
source-topicdari instans Source yang Anda konfigurasikan saat membuat aliran acara, lalu di kolom Actions di sebelah kanan, klik Quick Experience. -
Di panel Start Message Production And Consumption, masukkan pesan asli
[Jack, Male, Class 4|Alice, Female, Class 3|John, Male, Class 4], lalu klik OK untuk mengirim pesan.
3.2 Konfirmasi bahwa pesan telah dipisah dengan benar di topik instans RocketMQ tujuan
-
Di Konsol Message Queue for Apache RocketMQ, temukan topik
target-topicuntuk instans Sink yang Anda konfigurasikan saat membuat aliran acara, klik nama topik tersebut, lalu pilih tab Message Query. -
Untuk Query Method, pilih Query By Topic, lalu klik Search. Hasil kueri menunjukkan bahwa pesan asli telah dipisah menjadi tiga pesan terpisah di sink. Klik Details pada baris masing-masing pesan. Ketiga pesan tersebut adalah
"data": "Jack, Male, Class 4","data": "Alice, Female, Class 3", dan"data": "John, Male, Class 4".
4. Bersihkan sumber daya
Setelah pengujian selesai, jika Anda tidak berencana menggunakan fitur ini dalam waktu dekat, segera bebaskan sumber daya yang telah dibuat untuk menghindari biaya yang tidak perlu. Untuk informasi selengkapnya, lihat Delete topics, Delete RocketMQ instances, dan Delete functions.