Latihan - Menangani pesan antrean
Dalam latihan ini, Anda akan memperluas aplikasi Anda dengan rute yang dapat memicu pesan dalam antrean pesan.
Catatan
Sebelum memulai latihan ini, pastikan Anda telah mengunduh ekstensi Azurite, mengunduh Azure Storage Explorer, dan mengunduh Azure Functions Core Tools.
Menguraikan aplikasi
Untuk latihan ini, kita akan mulai pada aplikasi Azure Functions baru. Buat direktori baru dan tempatkan diri Anda di dalamnya.
Pilih Lihat>Pallet Perintah.
Pilih Azure Functions: Buat Project Baru.
Pilih folder, biasanya folder Anda saat ini.
Di Pilih bahasa, pilih Handler Kustom.
Di Pilih templat untuk fungsi pertama Anda, pilih HttpTrigger.
Beri nama aplikasi, seperti queueTrigger.
Pilih tingkat otorisasi anonim. Anda bisa mengubah nama nanti jika mau.
Pada akar, buat file bernama server.go. Proyek Anda sekarang memiliki file berikut:
queueTrigger/ function.json .funcignore .gitignore host.json local.settings.json proxies.json server.go
Buka file function.json di
queueTrigger
direktori. Temukan entri pengikatan pertama dalam elementype
:{ "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "get", "post" ] }
Ubah entri pengikatan tersebut ke konfigurasi ini:
{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }
Dalam langkah ini, Anda mengatur properti
name
. Anda akan merujuknya nanti dalam kode. Anda juga mengubah jenis pemicu menjadiqueueTrigger
, yang memungkinkan untuk mendengarkan pesan antrean.Nilai
queueName
menunjukkan antrean tertentu. Saat menjalankan emulator nanti, Anda akan membuat antrean dengan nama seperti itu.Terakhir, Anda menunjukkan variabel di local.settings.json yang akan berisi string koneksi ke antrean.
Membuat aplikasi
Pada titik ini, Anda memiliki kerangka aplikasi. Anda sekarang siap untuk menambahkan kode yang dapat menangani pesan antrean masuk.
Buka file server.go dan tambahkan kode berikut:
package main import ( "encoding/json", "fmt" "io/ioutil" "log" "net/http" "os" ) func queueHandler(w http.ResponseWriter, r *http.Request) { } func main() { customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT") if !exists { customHandlerPort = "8080" } mux := http.NewServeMux() mux.HandleFunc("/queueTrigger", queueHandler) fmt.Println("Go server Listening on: ", customHandlerPort) log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux)) }
Anda sekarang memiliki rute yang disiapkan di
/queueTrigger
.Temukan bagian impor dan tambahkan struktur berikut di bawahnya:
type InvokeRequest struct { Data map[string]json.RawMessage Metadata map[string]interface{} }
Temukan metode
queueHandler()
dan tambahkan perbarui dengan cara berikut:func queueHandler(w http.ResponseWriter, r *http.Request) { var invokeRequest InvokeRequest d := json.NewDecoder(r.Body) d.Decode(&invokeRequest) var parsedMessage string json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage) }
Kode pertama kali membaca isi dari aliran respons masuk dan mendekodenya:
var invokeRequest InvokeRequest d := json.NewDecoder(r.Body) d.Decode(&invokeRequest)
Kemudian pesan itu sendiri digali dengan panggilan ke
Unmarshal()
:var parsedMessage string json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)
Sekarang setelah Anda memiliki pesannya, mari kita cetak.
Tambahkan kode berikut:
fmt.Println(parsedMessage) // your message
Kode Anda sekarang sudah ditulis, tetapi Anda perlu mengonfigurasi proyek Anda sehingga Anda dapat mengujinya.
Dalam file host.json, temukan elemen
defaultExecutablePath
dan berikan nilai./server
.Catatan
Untuk Windows, Anda akan menggunakan nilai
.\server.exe
.Bangun file server.go dengan menjalankan
go build
di akar proyek:go build server.go
Mengonfigurasi lingkungan
Langkah selanjutnya adalah mengonfigurasi lingkungan Anda. Karena Anda mengembangkan secara lokal, Anda perlu mengaturnya sehingga Anda dapat berbicara dengan antrean pesan yang ditiru.
Dalam file local.settings.json, temukan elemen di
Values
yang dipanggilAzureWebJobsStorage
(atau tambahkan jika hilang). Berikan nilaiUseDevelopmentStorage=true
. Entri JSON Anda akan terlihat seperti ini:"AzureWebJobsStorage" : "UseDevelopmentStorage=true"
Mulai ekstensi Azurite dengan membuka palet perintah (Lihat>Palet Perintah) lalu pilih Azurite: Mulai Layanan Antrean.
Catatan
Langkah ini akan membuat beberapa file lokal di proyek Anda.
Buka Azure Storage Explorer. Di sisi kiri terlihat konten emulator.
Klik kanan simpul Antrean dan pilih opsi untuk membuat antrean baru. Beri nama item.
Catatan
Anda dapat memberi nama antrean tersebut apa saja yang Anda inginkan. Namun, Anda sedang akan mengonfigurasi file function.json Anda. Apa pun nama antrean Anda, perlu dimasukkan ke function.json.
Temukan function.json di bawah direktori
queueTrigger
. Pastikan bahwa arraybindings
memiliki entri berikut:{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }
Properti
queueName
memiliki nama yang sama dengan antrean yang Anda buat di Azure Storage Explorer. Properticonnection
menunjuk ke nilai yang Anda siapkan di local.settings.json.Properti
name
memiliki nilaiqueueItem
. Kode Go Anda menggunakan nilai ini untuk mengurai pesan antrean.
Menjalankan aplikasi
Pada titik ini, semuanya sudah diatur. Yang perlu Anda lakukan adalah menjalankan aplikasi, memulai Azure Storage Explorer, dan membuat pesan antrean. Kode Anda akan dapat menggunakan pesan tersebut.
Dari terminal, jalankan perintah
func start
di akar proyek:func start
Di Visual Studio Code, buka palet perintah dan jalankan Azurite: Start Queue Service.
Mulai Azure Storage Explorer, jika belum dimulai.
Di Azure Storage Explorer, pilih Tambahkan Pesan:
Pada dialog yang muncul, masukkan pesan dan pilih OK. Anda sekarang melihat detail pesan yang Anda buat.
Dalam Visual Studio Code, fungsi Anda sekarang dapat berjalan. Di terminal, Anda sekarang akan melihat pesan yang dicetak sebagai baris terakhir.
Fungsi Anda dapat menggunakan pesan antrean dan menulis kontennya.
Selamat! Anda sudah membangun fungsi Azure di Go yang dapat memicu pesan antrean. Anda juga mengurai pesan itu.
Anda bebas melakukan apa pun kepada pesan yang masuk. Misalnya, Anda dapat menyimpannya dalam database atau mungkin mengirimkannya sebagai payload dalam permintaan web.