全部产品
Search
文档中心

Function Compute:Kait siklus hidup untuk instans fungsi

更新时间:Nov 11, 2025

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

Informasi latar belakang

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

Aturan penagihan untuk kait siklus hidup instans sama dengan aturan untuk pemanggilan fungsi biasa. Namun, log eksekusinya hanya dapat dilihat 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

Initializer Hook Signature

Kait Initializer dijalankan setelah instans fungsi dimulai tetapi sebelum penanganan permintaan dijalankan. Function Compute menjamin bahwa kait Initializer berhasil dieksekusi hanya sekali selama siklus hidup sebuah instans. Jika kait Initializer gagal pada eksekusi pertama, pemanggilan fungsi langsung gagal. Untuk pemanggilan berikutnya, Function Compute membuat instans fungsi baru untuk menjalankan kait initializer.

Catatan

Ketika kait Initializer mengalami timeout atau gagal, server selalu mengembalikan kode status HTTP 200. Untuk menentukan apakah kegagalan inisialisasi menyebabkan error tersebut, periksa header respons X-Fc-Error-Type:InitializationError atau bidang errorMessage dalam badan respons.

Kait Initializer hanya memiliki satu parameter masukan, context, yang digunakan dengan cara yang sama seperti pada penanganan permintaan (Handler).

Untuk menggunakan kait Initializer, wariskan antarmuka FunctionInitializer dan implementasikan metode initialize-nya. Antarmuka tersebut didefinisikan sebagai berikut.

package com.aliyun.fc.runtime;

import java.io.IOException;

/**
 * Ini adalah antarmuka untuk operasi inisialisasi
 */
public interface FunctionInitializer {

    /**
     * Antarmuka untuk menangani permintaan inisialisasi Function Compute
     *
     * @param context Objek konteks lingkungan inisialisasi Function Compute.
     * @throws IOException IOException selama penanganan I/O
     */
    void initialize(Context context) throws IOException;
}

PreStop Hook Signature

Kait PreStop dijalankan sebelum instans fungsi dihancurkan. Untuk menggunakannya, wariskan antarmuka PreStopHandler dan implementasikan metode preStop-nya. Antarmuka tersebut didefinisikan sebagai berikut.

package com.aliyun.fc.runtime;

import java.io.IOException;

/**
 * Ini adalah antarmuka untuk operasi preStop
 */
public interface PreStopHandler {

    /**
     * Antarmuka untuk menangani permintaan preStop Function Compute
     *
     * @param context Objek konteks lingkungan preStop Function Compute.
     * @throws IOException IOException selama penanganan I/O
     */
    void preStop(Context context) throws IOException;
}

Contoh sederhana: Penanganan permintaan aliran

package example;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.StreamRequestHandler;
import com.aliyun.fc.runtime.FunctionInitializer;
import com.aliyun.fc.runtime.PreStopHandler;

public class App implements StreamRequestHandler, FunctionInitializer, PreStopHandler {
    @Override
    public void initialize(Context context) throws IOException {
        context.getLogger().info("initialize start ...");
    }

    @Override
    public void handleRequest(
            InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
        context.getLogger().info("handlerRequest ...");
        outputStream.write(new String("hello world\n").getBytes());
    }

    @Override
    public void preStop(Context context) throws IOException {
        context.getLogger().info("preStop start ...");
    }
}
Catatan

InputStream mendukung streaming. OutputStream tidak mendukung streaming respons.

Konfigurasikan kait siklus hidup

Configure Using The Console

Di Konsol Function Compute, Anda dapat mengatur kait siklus hidup di bagian Configuration > Instance Configuration pada pengaturan fungsi FC. Format kait adalah [Nama paket].[Nama kelas]::[Nama metode].

  • Initializer Hook: Atur bidang ini menjadi example.App::initialize. Ini menentukan metode initialize dalam file App.java dari paket example.

  • PreStop Hook: Atur bidang ini menjadi example.App::preStop. Ini menentukan metode preStop dalam file App.java dari paket example.

Configure Using Serverless Devs

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

  • Konfigurasi kait initializer

    Dalam konfigurasi fungsi, tambahkan bidang instanceLifecycleConfig.initializer. Bidang ini mencakup sub-bidang handler dan timeout.

  • Konfigurasi kait preStop

    Dalam konfigurasi fungsi, tambahkan bidang instanceLifecycleConfig.preStop. Bidang ini mencakup sub-bidang handler dan timeout.

Berikut ini adalah contohnya.

# ------------------------------------
#   Panduan 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 bantuan.
# ------------------------------------
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: mvn package -DskipTests
          path: ./
    props:
      region: ${vars.region}              
      functionName: "start-java-1xqf"
      description: 'hello world by serverless devs'
      runtime: "java8"
      code: ./target/HelloFCJava-1.0-SNAPSHOT-jar-with-dependencies.jar
      handler: example.App::handleRequest
      memorySize: 128
      timeout: 10
      instanceLifecycleConfig:      # Fungsi ekstensi
        initializer:                # Fungsi Initializer
          handler: example.App::initialize
          timeout: 60     
        preStop:                    # Fungsi PreStop
          handler: example.App::preStop  # Titik masuk fungsi
          timeout: 60               # Timeout
 

Untuk informasi selengkapnya tentang spesifikasi konfigurasi YAML untuk 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 dihancurkan, sehingga Anda tidak dapat langsung melihat log untuk kait PreStop. Untuk memicu kait PreStop dengan cepat, perbarui konfigurasi fungsi atau kode fungsi. Setelah pembaruan selesai, Anda dapat melihat log kait PreStop di Function Logs. Contoh lognya sebagai berikut:

    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

Program contoh

  • java11-mysql: Program contoh dari Function Compute yang menunjukkan kait Initializer dan PreStop.

    Contoh ini menunjukkan cara menggunakan kait Initializer pada waktu proses Java untuk mengambil konfigurasi database dari variabel lingkungan dan membuat koneksi MySQL. Contoh ini juga menunjukkan cara menggunakan kait PreStop untuk menutup koneksi MySQL.