全部产品
Search
文档中心

Function Compute:Metode kait siklus hidup untuk instans fungsi

更新时间:Nov 11, 2025

Topik ini menjelaskan cara mengimplementasikan kait siklus hidup instans pada waktu proses C#.

Informasi latar belakang

Setelah Anda mengimplementasikan dan mengonfigurasi kait siklus hidup instans, Function Compute akan memanggil kait tersebut ketika event siklus hidup instans yang sesuai terjadi. Waktu proses C# mendukung kait Initializer dan PreStop. Untuk informasi selengkapnya, lihat Konfigurasikan siklus hidup instans.

Aturan penagihan untuk kait siklus hidup instans sama dengan aturan penagihan untuk permintaan pemanggilan umum. Namun, log eksekusi kait hanya dapat dikueri di Real-time Logs, Function Logs, atau Advanced Logs. Log kait tidak ditampilkan di Invocation Request List. Untuk informasi selengkapnya, lihat Lihat log kait siklus hidup instans.

Tanda tangan metode kait

  • Panggilan balik inisialisasi

    Kait Initializer dieksekusi setelah instans fungsi dimulai dan sebelum penanganan dijalankan. Function Compute menjamin bahwa kait Initializer berhasil dieksekusi hanya sekali dalam siklus hidup sebuah instans. Jika kait Initializer gagal dieksekusi, kesalahan akan dikembalikan untuk pemanggilan fungsi tersebut. Pada pemanggilan fungsi berikutnya, sistem akan membuat instans fungsi baru untuk mengeksekusi kait Initializer.

    Catatan

    Ketika kait Initializer mengalami timeout atau gagal, server selalu mengembalikan kode status HTTP 200. Anda harus memeriksa header respons X-Fc-Error-Type:InitializationError atau bidang errorMessage dalam badan respons untuk menentukan apakah kesalahan disebabkan oleh kegagalan inisialisasi.

  • Kait PreStop

    Kait PreStop dieksekusi sebelum instans fungsi dihapus.

Tanda tangan metode kait Initializer dan PreStop dalam C# identik. Keduanya hanya menerima parameter masukan Context dan tidak mengembalikan parameter respons apa pun. Potongan kode berikut memberikan contohnya.

public void FunctionName(IFcContext context);

Anda juga dapat mendefinisikan kait sebagai metode statis. Potongan kode berikut memberikan contohnya.

public static void FunctionName(IFcContext context);

Contoh: Penanganan event Stream

Kode contoh berikut menunjukkan program sederhana yang mencakup kait Initializer dan kait PreStop.

using System;
using System.IO;
using System.Threading.Tasks;
using Aliyun.Serverless.Core;
using Microsoft.Extensions.Logging;

namespace Example
{
    public class Hello
    {
        public void Initialize(IFcContext context)
        {
            IFcLogger logger = context.Logger;
            logger.LogInformation("Initialize start");
            logger.LogInformation("Handle initializer: {0}", context.RequestId);
            logger.LogInformation("Initialize end");
        }

        public void PreStop(IFcContext context)
        {
            IFcLogger logger = context.Logger;
            logger.LogInformation("PreStop start");
            logger.LogInformation("Handle PreStop: {0}", context.RequestId);
            logger.LogInformation("PreStop end");
        }

        public async Task<Stream> StreamHandler(Stream input, IFcContext context)
        {
            IFcLogger logger = context.Logger;
            logger.LogInformation("Handle request: {0}", context.RequestId);

            MemoryStream copy = new MemoryStream();
            await input.CopyToAsync(copy);
            copy.Seek(0, SeekOrigin.Begin);
            return copy;
        }

        static void Main(string[] args){}
    }
}

Konfigurasikan kait siklus hidup

Gunakan Konsol Function Compute

Di Konsol Function Compute, pada halaman detail fungsi, pilih Configuration > Instance Configuration untuk mengatur kait siklus hidup. Untuk informasi selengkapnya, lihat Konfigurasikan siklus hidup instans. Format kait sama dengan format penanganan, yaitu Assembly Name::Namespace.Class Name::Method Name. Untuk informasi selengkapnya, lihat Handlers.

Contoh:

  • Kait Initializer: HelloFcApp::Example.Hello::Initialize

  • Kait PreStop: HelloFcApp::Example.Hello::PreStop

Gunakan Serverless Devs

Jika Anda menggunakan Serverless Devs, tambahkan kait Initializer dan PreStop ke file konfigurasi s.yaml.

  • Konfigurasi kait Initializer

    Di bawah konfigurasi function, tambahkan bidang instanceLifecycleConfig.initializer, yang mencakup bidang handler dan timeout.

  • Konfigurasi kait PreStop

    Di bawah konfigurasi function, tambahkan bidang instanceLifecycleConfig.preStop, yang mencakup bidang handler dan timeout.

Kode berikut memberikan contohnya.

# ------------------------------------
#   Manual resmi: https://manual.serverless-devs.com/user-guide/aliyun/#fc3
#   Tips: https://manual.serverless-devs.com/user-guide/tips/
#   Jika Anda memiliki pertanyaan, bergabunglah dengan grup DingTalk 33947367 untuk dukungan teknis.
# ------------------------------------
edition: 3.0.0
name: hello-world-app
access: "default"

vars: # Variabel global
  region: "cn-hangzhou"

resources:
  hello_world:
    component: fc3 
    actions:       
      pre-${regex('deploy|local')}: 
        - run: dotnet publish -c Release -o ./target
          path: ./HelloWorldApp
    props:
      region: ${vars.region}              
      functionName: "start-dotnetcore-p6jp"
      description: 'hello world by serverless devs'
      runtime: "dotnetcore3.1"
      code: ./HelloWorldApp/target/
      handler: HelloWorldApp::Example.Hello::StreamHandler
      memorySize: 128
      timeout: 10
      instanceLifecycleConfig:      # Fungsi ekstensi
        initializer:                # Kait Initializer
          handler: HelloFcApp::Example.Hello::Initialize
          timeout: 60     
        preStop:                    # Kait PreStop
          handler: HelloFcApp::Example.Hello::PreStop  # Handler
          timeout: 60               # Periode timeout    
      # triggers:
      #   - triggerName: httpTrigger # Nama pemicu
      #     triggerType: http # Jenis pemicu
      #     description: 'xxxx'
      #     qualifier: LATEST # Versi fungsi
      #     triggerConfig:
      #       authType: anonymous # Jenis autentikasi. Nilai yang valid: anonymous dan function.
      #       disableURLInternet: false # Menentukan apakah akses ke URL melalui Internet dinonaktifkan.
      #       methods: # Metode akses yang didukung oleh pemicu HTTP. Nilai yang valid: GET, POST, PUT, DELETE, dan HEAD.
      #         - GET
      #         - POST

Untuk informasi selengkapnya tentang sintaks YAML Serverless Devs, lihat Perintah umum Serverless Devs.

Lihat log kait siklus hidup instans

Anda dapat melihat log kait siklus hidup di Logs.

  1. Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih Function Management > Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang dituju.

  3. Pada halaman detail fungsi, klik tab Test Function, klik Test Function, lalu pilih Logs > Function Logs.

    Pada tab Logs, Anda dapat melihat log pemanggilan fungsi dan log Initializer. Contoh:

    2024-03-04 17:57:28FC Initialize Start RequestId: 1-65e59b07-1520da26-bf73bbb91b69
    2024-03-04 17:57:282024-03-04 09:57:28.192 1-65e59b07-1520da26-bf73bbb91b69 [info] initializer
    2024-03-04 17:57:28FC Initialize End RequestId: 1-65e59b07-1520da26-bf73bbb91b69
    2024-03-04 17:57:28FC Invoke Start RequestId: 1-65e59b07-1520da26-bf73bbb91b69
    2024-03-04 17:57:28FC Invoke End RequestId: 1-65e59b07-1520da26-bf73bbb91b69

    Setiap instans fungsi di-cache selama periode tertentu dan tidak langsung dihapus, sehingga log kait PreStop tidak dapat langsung dilihat. Untuk memicu kait PreStop dengan cepat, Anda dapat memperbarui konfigurasi atau kode fungsi. Setelah pembaruan selesai, log kait PreStop akan tersedia di Function Logs. Kode contoh berikut menunjukkan contohnya:

    2024-03-04 18:33:26FC PreStop Start RequestId: 93c93603-9fbe-4576-9458-193c8b213031
    2024-03-04 18:33:262024-03-04 10:33:26.077 93c93603-9fbe-4576-9458-193c8b213031 [info] preStop
    2024-03-04 18:33:26FC PreStop End RequestId: 93c93603-9fbe-4576-9458-193c8b213031