全部产品
Search
文档中心

Function Compute:Panggilan balik hasil

更新时间:Dec 18, 2025

Setelah menerima permintaan pemanggilan asinkron, Function Compute menyimpan permintaan tersebut dan segera mengembalikan respons tanpa menunggu eksekusi selesai. Jika Anda ingin menyimpan permintaan gagal yang diulang hingga jumlah maksimum tertentu atau memberi tahu aplikasi hilir tentang hasil pemanggilan asinkron, Anda dapat mengonfigurasi fitur panggilan balik hasil. Setelah mengonfigurasi layanan tujuan, Function Compute secara otomatis memanggil kembali layanan berdasarkan hasil eksekusi ketika permintaan pemanggilan asinkron dieksekusi.

Cara kerjanya

Gambar berikut menunjukkan proses panggilan balik hasil.

Skenario

  • Simpan Acara yang Dibuang untuk Digunakan Nanti

    Jika permintaan asinkron gagal dieksekusi meskipun sistem mencoba berulang kali menjalankan permintaan berdasarkan kebijakan pengulangan, Function Compute akan membuang permintaan tersebut. Jika tujuan dikonfigurasi untuk pemanggilan gagal, Function Compute mendorong informasi konteks dari permintaan gagal ke layanan pesan seperti ApsaraMQ for RocketMQ untuk diproses lebih lanjut. Anda juga dapat mengatur fungsi lain sebagai layanan tujuan. Function Compute secara otomatis mendorong informasi konteks dari permintaan gagal ke fungsi ini untuk mengeksekusi logika penanganan kesalahan kustom.

  • Beritahukan Layanan Hilir tentang Hasil Eksekusi

    Setelah permintaan berhasil dieksekusi, Function Compute mendorong informasi konteks permintaan ke layanan tujuan hilir. Misalnya, Anda telah mengonfigurasi Function Compute untuk secara otomatis mendekompresi file ZIP yang diunggah ke Object Storage Service (OSS) dan ingin menerima notifikasi setelah file ZIP didekompresi, Anda dapat mengonfigurasi fitur panggilan balik hasil untuk fungsi dekompresi.

Layanan tujuan yang didukung untuk pemanggilan asinkron

Jika Anda mengonfigurasi tujuan untuk pemanggilan asinkron suatu fungsi, Function Compute mengirimkan konteks dan data permintaan ke layanan yang ditentukan ketika hasil pemanggilan asinkron memenuhi kondisi tertentu. Anda dapat mengonfigurasi layanan tujuan yang berbeda untuk fungsi, alias, dan versi yang berbeda. Layanan tujuan berikut didukung untuk pemanggilan asinkron:

  • Simple Message Queue (formerly MNS)

  • Function Compute

  • EventBridge

  • ApsaraMQ for RocketMQ

Catatan

Hanya fungsi acara yang dapat dikonfigurasi sebagai layanan tujuan. Fungsi HTTP tidak dapat dikonfigurasi sebagai layanan tujuan dalam Function Compute. Untuk informasi lebih lanjut tentang fungsi acara dan fungsi HTTP, lihat Pemilihan Jenis Fungsi.

Perhatikan hal-hal berikut saat mengonfigurasi layanan tujuan untuk pemanggilan asinkron:

  • Konten Acara yang Dikirim ke Tujuan untuk Pemanggilan Asinkron

    Contoh kode berikut memberikan contoh konten acara ketika Simple Message Queue (formerly MNS), Function Compute, atau ApsaraMQ for RocketMQ dikonfigurasi sebagai tujuan untuk pemanggilan asinkron.

    {
      "timestamp": 1660120276975,
      "requestContext": {
        "requestId": "xxx",
        "functionArn": "acs:fc:::services/{serviceName}/functions/{functionName}",
           "condition": "FunctionResourceExhausted", 
            "approximateInvokeCount": 3
      },
      "requestPayload": "",
      "responseContext": {
        "statusCode": 200,
        "functionError": ""
      },
      "responsePayload": ""
    }

    Tabel 1. Deskripsi Parameter

    Parameter

    deskripsi

    timestamp

    Cap waktu pemanggilan.

    requestContext

    Konteks permintaan.

    requestContext.requestId

    ID permintaan pemanggilan asinkron.

    requestContext.functionArn

    Nama Sumber Daya Alibaba Cloud (ARN) dari fungsi yang dipanggil secara asinkron.

    requestContext.condition

    Kode kesalahan pemanggilan.

    requestContext.approximateInvokeCount

    Jumlah kali eksekusi pemanggilan asinkron. Nilai lebih besar dari 1 menunjukkan bahwa Function Compute telah mencoba memanggil ulang fungsi Anda.

    requestPayload

    Payload asli dari permintaan fungsi.

    responseContext

    Konteks respons.

    responseContext.statusCode

    Kode status yang dikembalikan oleh sistem untuk fungsi yang dipanggil. Kode status selain 200 menunjukkan terjadinya kesalahan sistem.

    responseContext.functionError

    Pesan kesalahan pemanggilan.

    responsePayload

    Payload asli yang dikembalikan setelah fungsi dieksekusi.

    Contoh kode berikut memberikan contoh konten acara ketika EventBridge dikonfigurasi sebagai tujuan untuk pemanggilan asinkron. Untuk informasi lebih lanjut, lihat Ikhtisar.

    {
        "datacontenttype": "application/json",
        "aliyunaccountid": "143xxxx",
        "data": {
            "requestContext": {
                "condition": "",
                "approximateInvokeCount": 1,
                "requestId": "0fcb7f0c-xxxx",
                "functionArn": "acs:fc:::services/xxxx.LATEST/functions/xxxx"
            },
            "requestPayload": "",
            "responsePayload": "",
            "responseContext": {
                "functionError": "",
                "statusCode": 200
            },
            "timestamp": 1660120276975
        },
        "subject": "acs:fc:::services/xxxx.LATEST/functions/xxxx",
        "source": "acs:fc",
        "type": "fc:AsyncInvoke:succeeded",
        "aliyunpublishtime": "2021-01-03T09:44:31.233Asia/Shanghai",
        "specversion": "1.0",
        "aliyuneventbusname": "xxxxxxx",
        "id": "ecc4865xxxxxx",
        "time": "2021-01-03T01:44:31Z",
        "aliyunregionid": "cn-shanghai-vpc",
        "aliyunpublishaddr": "199.99.xxx.xxx"
    }
  • Batas Payload

    Payload yang didukung oleh tujuan untuk pemanggilan asinkron tidak boleh melebihi batas berikut:

    • Simple Message Queue (formerly MNS): 64 KB

    • Function Compute: 128 KB

    • EventBridge: 64 KB

    • ApsaraMQ for RocketMQ: 4 MB

  • Penghindaran Loop

    Saat mengonfigurasi tujuan untuk pemanggilan asinkron, pastikan Anda tidak membuat loop. Misalnya, Anda mengonfigurasi Fungsi B sebagai tujuan untuk pemanggilan asinkron sukses Fungsi A dan Fungsi A sebagai tujuan untuk pemanggilan asinkron sukses Fungsi B. Pemanggilan asinkron dan eksekusi Fungsi A dapat memulai loop tak terbatas di mana Fungsi A dan Fungsi B terus-menerus saling memanggil.

Konfigurasikan tujuan untuk pemanggilan asinkron

Catatan

Sebelum mengonfigurasi tujuan untuk pemanggilan asinkron, Anda harus Membuat Fungsi dan memastikan bahwa peran yang digunakan oleh fungsi dalam layanan memiliki izin pada layanan cloud Alibaba terkait. Item berikut mencantumkan izin yang diperlukan oleh layanan cloud yang sesuai. Untuk informasi lebih lanjut, lihat Berikan Izin Function Compute untuk Mengakses Layanan Cloud Alibaba Lainnya.

  • Simple Message Queue (formerly MNS): mns:SendMessage atau mns:PublishMessage

  • Function Compute: fc:InvokeFunction

  • EventBridge: eventbridge:PutEvents

  • Message Queue for Apache RocketMQ: mq:PUB

  1. Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.

  2. Di bilah navigasi atas, pilih wilayah. Di halaman Services, klik layanan yang diinginkan.

  3. Di halaman Functions, klik nama fungsi yang ingin Anda kelola. Di halaman detail fungsi, klik tab Asynchronous Configurations.

  4. Di tab Asynchronous Configurations, konfigurasikan parameter berdasarkan kebutuhan bisnis Anda.

    • Konfigurasikan Tujuan untuk Pemanggilan Sukses

      1. Di bagian Destination for Successful Invocation, klik Modify.

      2. Di panel Modify Destination for Successful Invocation, atur Invoke Other Services upon Success ke Enable dan konfigurasikan parameter Layanan Tujuan. Tabel berikut menjelaskan parameter Layanan Tujuan.

        Parameter

        Deskripsi

        Layanan Tujuan

        Function Compute. Jika Anda memilih Function Compute untuk parameter Destination Service, Anda harus mengonfigurasi parameter berikut:

        • Service Name: nama layanan di Function Compute.

        • Version or Alias: alias atau versi layanan yang ditentukan.

        • Function Name: nama fungsi dalam layanan.

          Catatan

          Hanya fungsi acara yang dapat dikonfigurasi sebagai layanan tujuan. Fungsi HTTP tidak dapat dikonfigurasi sebagai layanan tujuan dalam Function Compute.

        Simple Message Queue (formerly MNS). Jika Anda memilih Simple Message Queue (formerly MNS) untuk parameter Destination Service, Anda harus mengonfigurasi parameter berikut:

        • Destination Type: jenis tujuan yang menerima hasil pemanggilan sukses. Nilai valid:

          • Queue

            Model pesan berbasis antrian menyediakan layanan konsumsi pesan yang andal dan bersamaan. Setiap pesan dalam antrian hanya dapat dikonsumsi oleh satu klien.

          • Topic

            Model pesan berbasis topik digunakan untuk mengirim pesan dari satu klien penerbit ke beberapa klien pelanggan. Topik SMQ dapat didorong sebagai pesan menggunakan beberapa metode.

        • Queue: nama antrian Simple Message Queue (formerly MNS). Parameter ini diperlukan ketika parameter Jenis Tujuan diatur ke Antrian.

        • Theme: nama topik Simple Message Queue (formerly MNS). Parameter ini diperlukan ketika parameter Jenis Tujuan diatur ke Topik.

        ApsaraMQ for RocketMQ. Jika Anda memilih ApsaraMQ for RocketMQ untuk parameter Layanan Tujuan, Anda harus mengonfigurasi parameter berikut:

        • Instances: instans ApsaraMQ for RocketMQ.

        • Topic: nama topik ApsaraMQ for RocketMQ.

        EventBridge. Jika Anda memilih EventBridge untuk parameter Layanan Tujuan, Anda harus mengonfigurasi parameter Custom Event Bus.

      3. Klik OK.

    • Konfigurasikan Tujuan untuk Pemanggilan Gagal

      1. Di bagian Destination for Failed Invocation, klik Modify.

      2. Di panel Modify Destination for Failed Invocation, pilih Enable untuk parameter Invoke Other Services upon Failure dan konfigurasikan parameter Layanan Tujuan.

        Konfigurasi Layanan Tujuan untuk pemanggilan gagal serupa dengan pemanggilan sukses. Untuk informasi lebih lanjut, lihat bagian Konfigurasikan Tujuan untuk Pemanggilan Sukses dari topik ini.

      3. Klik OK.

    Setelah fungsi dipicu, Anda dapat melihat informasi berikut dari layanan tujuan yang dikonfigurasi ketika eksekusi fungsi berhasil atau gagal:

    {
        "timestamp": 1660120276975,
        "requestContext": {
            "requestId": "xxx",
            "functionArn": "acs:fc:::services/{serviceName}/functions/{functionName}",
            "condition": "FunctionResourceExhausted",
            "approximateInvokeCount": 3
        },
        "requestPayload": "",
        "responseContext": {
            "statusCode": 200,
            "functionError": ""
        },
        "responsePayload": ""
    }

Penanganan kegagalan panggilan balik

Jika peran layanan tidak memiliki izin pada layanan tujuan atau layanan tujuan tidak tersedia, panggilan balik ke layanan tujuan mungkin gagal. Anda dapat menangani kesalahan berdasarkan metrik dan log yang disediakan oleh Function Compute. Tabel berikut menjelaskan kesalahan umum dan tindakan sistem yang sesuai.

Kode kesalahan

Deskripsi

Tindakan sistem

5xx

Permintaan dibatasi atau terjadi kesalahan konten.

Function Compute secara otomatis mencoba ulang panggilan balik dalam mode backoff eksponensial. Interval percobaan ulang awal adalah 500 milidetik dan durasi percobaan ulang maksimum adalah 30 menit.

4xx

Anda tidak memiliki izin yang cukup, parameter permintaan salah, atau badan pesan permintaan melebihi batas layanan tujuan. Contoh parameter permintaan yang salah adalah bahwa sumber daya untuk layanan tujuan yang ditentukan oleh parameter permintaan telah dihapus.

Sistem mengembalikan kesalahan dan mencatat pesan kesalahan.

Metrik panggilan balik hasil

Ketika panggilan balik gagal, Function Compute mencatat metrik yang sesuai dan menampilkan metrik tersebut di konsol. Masuk ke Function Compute console. Di panel navigasi kiri, pilih Advanced Features > Monitoring. Pada halaman yang muncul, klik nama layanan yang ingin Anda lihat metriknya di kolom Service Name. Tabel berikut menjelaskan metrik untuk pemanggilan layanan tujuan.

Metrik

Deskripsi

FunctionDestinationErrors

Jumlah permintaan yang gagal memicu tujuan selama eksekusi fungsi ketika tujuan dikonfigurasikan untuk pemanggilan asinkron suatu fungsi. Statistik dikumpulkan setiap menit atau setiap jam.

FunctionDestinationSucceed

Jumlah permintaan yang memicu tujuan selama eksekusi fungsi ketika tujuan dikonfigurasikan untuk pemanggilan asinkron suatu fungsi. Statistik dikumpulkan setiap menit atau setiap jam.

Untuk informasi lebih lanjut tentang metrik, lihat Metrik Pemantauan.

Referensi

  • Anda juga dapat memanggil operasi API atau menggunakan Serverless Devs untuk mengonfigurasi layanan tujuan untuk pemanggilan asinkron. Untuk informasi lebih lanjut, lihat Referensi API dan Perintah Serverless Devs.

  • Fungsi HTTP tidak dapat digunakan sebagai layanan tujuan panggilan balik dalam Function Compute. Namun, fungsi HTTP mendukung pemanggilan sinkron dan asinkron. Untuk informasi lebih lanjut, lihat Ikhtisar.

  • Anda dapat mengaktifkan mode tugas asinkron saat mengonfigurasi fitur panggilan balik hasil. Untuk informasi lebih lanjut, lihat Ikhtisar.