Pemicu antrean

Selesai

Antrean pesan adalah komponen perangkat lunak yang digunakan untuk menangani Olahpesan antar proses, alur, atau aplikasi. Sebuah antrean dapat menyimpan pesan, dan pekerja dapat mengambil pesan saat waktunya tepat.

Di cloud, antrean pesan dapat menghasilkan kejadian dengan payload. Layanan seperti Azure Functions dapat mendengarkan pesan seperti itu dan menjalankan kodenya saat pesan diterbitkan.

Menggunakan antrean pesan

Agar fungsi Azure dapat menggunakan pesan dari antrean pesan, fungsi tersebut memerlukan pemicu, dan, bisa jadi, pengikatan.

Fungsi Azure harus mendengarkan antrean tertentu sehingga kodenya dipicu saat ada pesan baru yang diterbitkan pada antrean tersebut. Untuk menyiapkan pemicu, Anda harus memberikan informasi masuk yang tepat sehingga kode pemicu tahu cara menyambungkan ke antrean pesan. Anda membuat entri di file function.json untuk fungsi yang mendengarkan antrean. Dalam elemen bindings, tentukan properti ini pada entri:

Properti Nilai
name Nama yang dapat Anda gunakan sebagai referensi dalam kode
type queueTrigger
direction in
queueName Nama antrean
connection Variabel konfigurasi di local.settings.json

Contoh entri dapat ditentukan seperti ini:

{
    "name": "myQueueItem",
    "type": "queueTrigger",
    "direction": "in",
    "queueName": "messages-incoming",
    "connection": "AzureWebJobsStorage"
  }

Jika antrean ini berada di akun penyimpanan, nilai AzureWebJobsStorage adalah nilai string koneksi.

Anda tidak benar-benar memerlukan pengikatan saat menggunakan pesan dari antrean. Namun, jika Anda ingin menulis ke antrean, Anda memerlukan pengikatan output. Dengan pengikatan tersebut, Anda akan mendapatkan referensi ke antrean yang dimaksudkan.

Catatan

Saat ini, hanya pengikatan output saja yang didukung untuk antrean.

Mengembangkan secara lokal

Sebagai pengembang, Anda tentu menginginkan siklus tanggapan yang singkat. Anda juga ingin memastikan bahwa pengalaman pengembang Anda sangat dekat dengan lingkungan produksi. Cara untuk mencapai kedua tujuan ini adalah dengan menggunakan emulator antrean.

Emulator antrean membuat Anda dapat mensimulasikan pesan antrean nyata yang akan direspons oleh fungsi Azure Anda. Cara menggunakan emulator:

  1. Instal emulator. Cari Azurite di Visual Studio Code, atau unduh ekstensi Azurite.

  2. Untuk menggunakan fungsionalitas emulator, mulai dengan memilih Azure: Mulai Layanan Antrean pada palet perintah.

    Menjalankan perintah ini akan memulai pendengar yang disebut Azure Storage Explorer yang dapat diambil oleh aplikasi lain. Storage Explorer adalah aplikasi klien yang membuat Anda dapat menelusuri sumber daya cloud dan menggunakan fungsionalitas emulator.

  3. Mengunduh Azure Storage Explorer. Kemudian buka aplikasi, dan aplikasi hanya akan berfungsi jika Anda akan melihat indikasi berikut:

    Screenshot that shows the emulator in Azure Storage Explorer.

  4. Buat antrean di emulator. Anda akan menggunakan antrean ini sebagai bagian dari tindakan mengonfigurasi titik akhir fungsi. Anda dapat membuat antrean baru dengan mengklik kanan elemen antrean.

  5. Untuk memastikan bahwa aplikasi Functions Anda menggunakan emulator, Anda harus mengatur string koneksi dengan benar. Buka local.settings.json, temukan elemen AzureWebJobsStorage, dan berikan nilainya "UseDevelopmentStorage=true".

    Catatan

    Ingatlah untuk mengatur properti ini dengan nilai yang berbeda saat Anda pindah ke cloud. Properti tersebut harus menunjuk ke sumber daya di Azure yang sebenarnya saat dalam produksi.

Membangun fungsi

Sekarang Anda sudah menyiapkan emulator lokal yang memiliki antrean. Anda juga telah mengonfigurasi proyek agar menunjuk ke emulator lokal. Sekarang, Anda harus membuat fungsi untuk menangani pemicu antrean.

Membuat titik akhir fungsi

Saat ini, Anda sudah siap membuat fungsi yang dapat menangani pesan antrean yang masuk. Buat folder untuk fungsi Anda dan beri nama, misalnya, queueTrigger. Kemudian, buat file function.json dan berikan konten berikut:

{
  "bindings": [{
    "name" "queueItem",
    "type": "queueTrigger",
    "direction": "in",
    "queueName" : "items",
    "connection": "AzureWebJobsStorage"
  }]
}

Nilai elemen name penting karena Anda akan menjadikannya sebagai referensi nanti dalam kode Anda untuk mengurai data yang masuk dari antrean. Jenisnya harus queueTrigger sehingga antrean memicunya ketika ada pesan baru.

Elemen queueName secara unik mengidentifikasi antrean mana yang berinteraksi dengan Anda. Konten apa pun yang Anda masukkan di sini harus cocok dengan yang Anda sebut sebagai antrean di emulator, atau yang nantinya disebut sebagai antrean Anda yang sebenarnya di Azure.

Elemen connection menunjuk ke nilai elemen AzureWebJobsStorage di local.settings.json.

Menangani pesan antrean

Untuk menangani pesan antrean yang masuk, Anda harus menulis kode yang dapat mengurai pesan yang Anda butuhkan. Pada tahapan tersebut, Anda kemudian dapat memutuskan tindakan apa yang harus dilakukan selanjutnya. Misalnya, Anda dapat memulai permintaan web, kemudian meletakkan pesan tersebut di antrean lain, atau mengirim pesan ke database.

Menyiapkan rute

Anda memerlukan rute untuk menangani permintaan yang masuk. Azure Functions akan menangani permintaan ke antrean di akar. Saat Anda menyiapkan rute sebagai berikut, permintaan Anda akan dipanggil sebagai http://localhost:<port>/queueTrigger:

http.HandleFunc("/queueTrigger", handleQueueTrigger)

Mendekode permintaan

Saat pesan antrean dikirimkan kepada Anda, pesan tersebut berbentuk seperti berikut:

{
  "Data": {
    "queueItem": "your message"
  },
  "Metadata": {
    "DequeueCount": 1,
    "ExpirationTime": "2019-10-16T17:58:31+00:00",
    "Id": "800ae4b3-bdd2-4c08-badd-f08e5a34b865",
    "InsertionTime": "2019-10-09T17:58:31+00:00",
    "NextVisibleTime": "2019-10-09T18:08:32+00:00",
    "PopReceipt": "AgAAAAMAAAAAAAAAAgtnj8x+1QE=",
    "sys": {
      "MethodName": "QueueTrigger",
      "UtcNow": "2019-10-09T17:58:32.2205399Z",
      "RandGuid": "24ad4c06-24ad-4e5b-8294-3da9714877e9"
    }
  }
}

Sebagai bagian dari tindakan dekode permintaan masuk tersebut, Anda memerlukan struktur pembantu yang membuat pesan sebelumnya sebagai model. Harusnya akan terlihat seperti ini:

type InvokeRequest {
   Data map[string]json.RawMessage
   Metadata map[string]interface{}
}

Mulailah menulis kode untuk mengambil permintaan yang masuk tersebut dan mendekode pesannya:

func handleQueueTrigger(w http.ResponseWrite, r *http.Request) {
   var invokeRequest InvokeRequest
   d := json.NewDecoder(r.Body)
   d.Decode(&invokeRequest)
}

Sekarang, Anda berada pada tahapan dengan permintaan yang telah berhasil didekodekan, tetapi Anda harus mengurai pesan antrean itu sendiri.

Mengurai pesan antrean

Setelah permintaan berhasil didekodekan, pesan antrean Anda dapat diambil dari permintaan pada properti Data. Anda juga harus menjadikan pesan sebagai referensi berdasarkan nilai properti name yang Anda siapkan di file function.json. Kode untuk mengambil pesan adalah kode satu baris seperti ini:

invokeRequest.Data["queueItem"]

Karena Anda harus dapat membaca pesan ini dalam teks yang jelas, Anda akan menggunakan pustaka JSON dan mengurainya. Pustaka JSON akan menggunakan metode Unmarshal() yang menggunakan dua parameter: pesan yang akan diurai serta variabel untuk menempatkan pesan yang sudah diurai. Jadi, kode Anda harus terlihat seperti ini:

var parsedMessage string
json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)

Pada tahapan ini, parsedMessage berisi pesan Anda. Jika Anda ingin mencetaknya ke konsol, gunakan kode berikut:

fmt.Println(parsedMessage) // your message

Catatan

Jika pesan Anda adalah pesan yang lebih canggih daripada string, parsedMessage harus memiliki struktur yang cocok dengan bentuk yang ditunjuk oleh queueMessage.

Memicu pesan

Anda dapat menggunakan Azure Storage Explorer untuk menguji aplikasi. Di panel kanan alat, pilih tombol Tambahkan Pesan untuk membuat pesan pada antrean.

Screenshot that shows the button for adding a message on the queue.

Jika Anda memiliki aplikasi Functions dan saat ini aplikasinya berjalan, aplikasi tersebut akan memicu pengikatan dan kode Anda akan dipanggil.