Ketika publisher mengirimkan pesan ke topik MNS, Function Compute secara otomatis memanggil fungsi dengan pesan tersebut sebagai muatan event—tanpa memerlukan titik akhir HTTP. Gunakan integrasi ini untuk melakukan pra-pemrosesan pesan sebelum pengiriman, menyalurkan ke layanan eksternal, atau menyimpan pesan tertentu ke penyimpanan data.
Cara kerja
Mengonfigurasi pemicu topik MNS mendaftarkan fungsi Anda sebagai subscriber ke topik tersebut. Ketika publisher memanggil operasi PublishMessage pada topik, pesan tersebut langsung diteruskan ke penanganan fungsi Anda sebagai parameter event. Untuk latar belakang model pemicu, lihat Dasar-dasar.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Layanan Function Compute — Buat layanan
Fungsi Function Compute — Buat fungsi
Topik MNS di wilayah yang sama dengan fungsi Anda — Buat topik
Catatan penggunaan
Hindari loop panggilan. Jika fungsi Anda mempublikasikan pesan baru kembali ke topik yang sama yang memicunya, fungsi tersebut akan dipanggil berulang tanpa henti. Rancang logika fungsi Anda untuk mencegah loop ini.
Topik MNS dan fungsi Function Compute harus berada di wilayah yang sama.
Langkah 1: Buat pemicu topik MNS
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, temukan layanan target dan klik Functions di kolom Actions.
Di halaman Functions, klik fungsi yang ingin Anda ubah.
Di halaman detail fungsi, klik tab Triggers, pilih versi atau alias dari daftar drop-down Version or Alias, lalu klik Create Trigger.
Di panel Create Trigger, konfigurasikan parameter berikut dan klik OK.
| Parameter | Deskripsi | Contoh |
|---|---|---|
| Trigger type | Pilih Simple Message Queue (formerly MNS) Triggered by Topic. | Simple Message Queue (formerly MNS) Triggered by Topic |
| Name | Masukkan nama pemicu. | trigger-mns |
| Version or alias | Default-nya adalah LATEST. Untuk menargetkan versi atau alias lain, pilih dari pojok kanan atas halaman detail fungsi. Untuk detailnya, lihat Manage versions dan Manage aliases. | LATEST |
| MNS region | Pilih wilayah tempat topik berada. Topik harus berada di wilayah yang sama dengan fungsi. | China (Chengdu) |
| Topic | Pilih topik dari daftar. | Mytopic |
| Filter tag | Tentukan tag untuk penyaringan pesan. Fungsi hanya dipanggil jika pesan masuk berisi tag ini. | tag |
| Event format | Pilih STREAM atau JSON. Lihat Referensi format event di bawah untuk mengetahui perbedaannya. | JSON |
| Retry policy | Pilih Backoff Retry atau Exponential Decay Retry. Untuk panduan, lihat NotifyStrategy. | Backoff Retry |
| Role name | Pilih AliyunMNSNotificationRole. Jika ini adalah pemicu pertama jenis ini, klik Authorize Now di kotak dialog yang muncul. | AliyunMNSNotificationRole |
Setelah pemicu dibuat, pemicu tersebut akan muncul di tab Triggers. Untuk mengubah atau menghapus pemicu, lihat Manage triggers.
Langkah 2: Pahami format event
Event yang diterima fungsi Anda bergantung pada Event format yang Anda pilih saat membuat pemicu dan apakah pesan mencakup atribut. Untuk informasi lebih lanjut, lihat NotifyContentFormat.
Referensi format event
Format STREAM
Tanpa atribut pesan, event berupa string teks biasa:
'hello topic'Dengan atribut pesan, event berupa objek JSON:
{
"body": "hello topic",
"attrs": {
"Extend": "{\"key\":\"value\"}"
}
}Format JSON
Tanpa atribut pesan:
{
"TopicOwner": "118620210433****",
"Message": "hello topic",
"Subscriber": "118620210433****",
"PublishTime": 1550216480040,
"SubscriptionName": "test-fc-subscribe",
"MessageMD5": "BA4BA9B48AC81F0F9C66F6C909C3****",
"TopicName": "Mytopic",
"MessageId": "2F5B3C082B923D4EAC694B76D928****"
}Dengan atribut pesan, pasangan kunci-nilai tambahan dari PublishMessage muncul di tingkat teratas:
{
"key": "value",
"TopicOwner": "118620210433****",
"Message": "hello topic",
"Subscriber": "118620210433****",
"PublishTime": 1550216302888,
"SubscriptionName": "test-fc-subscribe",
"MessageMD5": "BA4BA9B48AC81F0F9C66F6C909C3****",
"TopicName": "Mytopic",
"MessageId": "2F5B3C281B283D4EAC694B742528****"
}Referensi field event JSON
| Field | Tipe | Contoh | Deskripsi |
|---|---|---|---|
| key | String | value | Pasangan kunci-nilai dari atribut pesan |
| TopicOwner | String | 118620210433**** | ID akun yang berlangganan ke topik |
| Message | String | hello topic | Konten pesan |
| Subscriber | String | 118620210433**** | ID akun subscriber |
| PublishTime | Int | 1550216302888 | Waktu pesan dipublikasikan |
| SubscriptionName | String | test-fc-subscribe | Nama langganan |
| MessageMD5 | String | BA4BA9B48AC81F0F9C66F6C909C3**** | Hash MD5 dari isi pesan |
| TopicName | String | Mytopic | Nama topik MNS |
| MessageId | String | 2F5B3C281B283D4EAC694B742528**** | ID pesan unik |
Konfigurasi event uji
Di halaman detail fungsi, klik tab Code, lalu klik ikon
di samping Test Function dan pilih Configure Test Parameters.Di panel Configure Test Parameters, pilih Create New Test Event atau Modify Existing Test Event, masukkan Event Name, tempel salah satu contoh event di atas ke editor, lalu klik OK.
Langkah 3: Tulis dan uji kode fungsi
Contoh Python berikut menunjukkan cara menangani event pemicu topik MNS. Anda dapat menggunakannya sebagai templat fungsi dan menambahkan logika pemrosesan kustom Anda.
Di halaman detail fungsi, klik tab Code, masukkan kode fungsi Anda di editor, lalu klik Deploy.
import json
import logging
def handler(event, context):
logger = logging.getLogger()
logger.info("mns_topic trigger event = {}".format(event))
# Contohnya, catat event ke Tablestore.
return "OK"Klik Test Function di tab Code.
Setelah fungsi dijalankan, hasil eksekusi dan log akan muncul di tab Code.
Langkah selanjutnya
Konfigurasikan pemicu menggunakan alat alternatif:
Serverless Devs — lihat Perintah terkait pemicu
SDKs — lihat SDKs
Untuk mengubah atau menghapus pemicu yang sudah ada, lihat Manage triggers.