全部产品
Search
文档中心

Function Compute:Panggilan balik siklus hidup untuk instance fungsi

更新时间:Dec 18, 2025

Topik ini menjelaskan cara mengimplementasikan panggilan balik siklus hidup untuk instance fungsi dalam lingkungan runtime Java.

Informasi latar belakang

Setelah Anda mengonfigurasi panggilan balik siklus hidup untuk instance fungsi, Function Compute akan memanggil panggilan balik tersebut ketika peristiwa siklus hidup terkait untuk instance terjadi. Panggilan balik yang dapat dikonfigurasikan meliputi: Initializer, PreFreeze, dan PreStop. Lingkungan runtime Java mendukung semua panggilan balik tersebut. Untuk informasi lebih lanjut, lihat Siklus Hidup Instance Fungsi.

Aturan penagihan untuk panggilan balik siklus hidup instance fungsi sama dengan aturan penagihan untuk permintaan pemanggilan umum. Namun, log eksekusi hanya dapat diperiksa di Function Logs, Instance Logs, atau Advanced Logs. Log untuk panggilan balik siklus hidup tidak ditampilkan di Call Request List. Untuk informasi lebih lanjut, lihat Lihat Log Panggilan Balik Siklus Hidup Instance..

Tanda tangan metode

Initializer hook signature

Panggilan balik Initializer dijalankan setelah instance fungsi dimulai dan sebelum handler dijalankan. Function Compute memastikan bahwa panggilan balik Initializer dipanggil dengan sukses hanya sekali selama siklus hidup instance fungsi. Jika panggilan balik Initializer gagal dijalankan, sistem akan mencoba kembali hingga berhasil, kemudian menjalankan handler Anda. Pastikan bahwa panggilan balik Initializer dikonfigurasi dengan benar saat dipanggil berulang kali.

Panggilan balik Initializer memiliki parameter input context dan dapat dipanggil dengan cara yang sama seperti penanganan acara.

Untuk menggunakan panggilan balik Initializer, operasi FunctionInitializer harus diwarisi dan metode initialize dalam operasi tersebut harus diimplementasikan. Contoh kode berikut menunjukkan cara mendefinisikan operasi FunctionInitializer:
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

Panggilan balik PreStop dijalankan sebelum instance fungsi dihapus. Untuk menggunakan panggilan balik PreStop, operasi PreStopHandler harus diwarisi dan metode preStop dalam operasi tersebut harus diimplementasikan. Contoh kode berikut menunjukkan cara mendefinisikan operasi PreStopHandler:
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;
}

PreFreeze hook signature

Panggilan balik PreFreeze dijalankan sebelum instance fungsi dibekukan. Untuk menggunakan panggilan balik PreFreeze, operasi PreFreezeHandler harus diwarisi dan metode preFreeze dalam operasi tersebut harus diimplementasikan. Contoh kode berikut menunjukkan cara mendefinisikan operasi PreFreezeHandler:
package com.aliyun.fc.runtime;

import java.io.IOException;

/**
 * Ini adalah antarmuka untuk operasi preFreeze
 */
public interface PreFreezeHandler {

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

Contoh: StreamRequestHandler

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.PreFreezeHandler;
import com.aliyun.fc.runtime.PreStopHandler;

public class App implements StreamRequestHandler, FunctionInitializer, PreFreezeHandler, 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 preFreeze(Context context) throws IOException {
        context.getLogger().info("preFreeze start ...");
    }

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

Konfigurasi panggilan balik siklus hidup

Use the Function Compute console

Anda dapat mengonfigurasi panggilan balik siklus hidup pada halaman Detail Fungsi di Function Compute console. Format panggilan balik adalah [Nama Paket].[Nama Kelas]::[Nama Metode]. Contoh:db_java_lifecycle
  • Jika Anda mengatur Initializer Hook ke example.App::initialize, metode initialize di file App.java dari paket example diimplementasikan.
  • Jika Anda mengatur PreFreeze Hook ke example.App::preFreeze, metode preFreeze di file App.java dari paket example diimplementasikan.
  • Jika Anda mengatur PreStop Hook ke example.App::preStop, metode preStop di file App.java dari paket example diimplementasikan.

Use Serverless Devs

Jika Anda menggunakan Serverless Devs untuk mengonfigurasi panggilan balik siklus hidup, Anda harus menambahkan Initializer hook, PreFreeze hook, dan PreStop hook ke file s.yaml.
  • Konfigurasi Panggilan Balik Initializer

    Tambahkan bidang initializer dan initializationTimeout ke parameter function.

  • Konfigurasi Panggilan Balik PreFreeze

    Tambahkan bidang instanceLifecycleConfig.preFreeze, termasuk handler dan timeout, ke parameter function.

  • Konfigurasi Panggilan Balik PreStop

    Tambahkan bidang instanceLifecycleConfig.preStop, termasuk handler dan timeout, ke parameter function.

Contoh kode:

edition: 1.0.0
name: hello-world  # Nama proyek.
access: default    # Alias kunci.

vars: # Variabel global.
  region: cn-shanghai # ID wilayah.
  service:
    name: fc-example
    description: 'contoh fc oleh serverless devs'

services:
  helloworld: # Nama layanan atau modul.
    component: fc
    actions: # Logika eksekusi kustom.
      pre-deploy: # Operasi sebelum penyebaran.
        - run: mvn package # Perintah untuk dijalankan.
          path: ./ # Jalur tempat perintah dijalankan.
    props: # Nilai properti komponen.
      region: ${vars.region}
      service: ${vars.service}
      function:
        name: java8-lifecycle-hook-demo
        description: 'contoh fc oleh serverless devs'
        runtime: java8
        codeUri: ./target
        handler: example.App::handleRequest
        memorySize: 128
        timeout: 60
        initializationTimeout: 60
        initializer: example.App::initialize
        instanceLifecycleConfig:
          preFreeze:
            handler: example.App::preFreeze
            timeout: 30
          preStop:
            handler: example.App::preStop
            timeout: 30

Untuk informasi lebih lanjut tentang sintaks YAML Serverless Devs, lihat Perintah Serverless Devs.

Lihat log panggilan balik siklus hidup instance.

Anda dapat melihat log untuk panggilan balik siklus hidup di Function Logs.

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

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

  3. Pada halaman Functions, klik nama fungsi yang diinginkan. Pada halaman Detail Fungsi yang muncul, klik tab Test Function.
  4. Pada tab Test Function, klik Test Function. Pilih Logs > Function Logs.
    Pada tab Function Logs, Anda dapat melihat log pemanggilan, serta log untuk panggilan balik Initializer dan PreFreeze fungsi. Contoh:
    2022-10-09 19:26:17 FunctionCompute dotnetcore3.1 runtime inited.
    2022-10-09 19:26:17 FC Initialize Start RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Initialize start
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Handle initializer: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Initialize end
    2022-10-09 19:26:17 FC Initialize End RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 FC Invoke Start RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Handle request: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 FC Invoke End RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 FC PreFreeze Start RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] PreFreeze start
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Handle PreFreeze: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] PreFreeze end
    2022-10-09 19:26:17 FC PreFreeze End RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
    Setiap instance fungsi disimpan dalam cache selama periode tertentu dan tidak langsung dihapus, sehingga Anda tidak dapat melihat log untuk panggilan balik PreStop segera. Untuk memicu panggilan balik PreStop dengan cepat, Anda dapat memperbarui konfigurasi fungsi atau kode fungsi. Setelah pembaruan selesai, Anda dapat melihat log untuk panggilan balik PreStop di Function Logs. Contoh:
    2022-10-09 19:32:17 FC PreStop Start RequestId: 03be685c-378b-4736-8b08-a67c1d*****
    2022-10-09 19:32:17 2022-10-09 19:32:17 03be685c-378b-4736-8b08-a67c1d***** [INFO] PreStop start
    2022-10-09 19:32:17 2022-10-09 19:32:17 03be685c-378b-4736-8b08-a67c1d***** [INFO] Handle PreStop: 03be685c-378b-4736-8b08-a67c1d*****
    2022-10-09 19:32:17 2022-10-09 19:32:17 03be685c-378b-4736-8b08-a67c1d***** [INFO] PreStop end
    2022-10-09 19:32:17 FC PreStop End RequestId: 03be685c-378b-4736-8b08-a67c1d*****

Program contoh

  • Untuk informasi tentang program contoh pada panggilan balik Initializer dan PreStop yang disediakan oleh Function Compute, lihat java11-mysql.

    Contoh ini menunjukkan cara menggunakan panggilan balik Initializer untuk mendapatkan konfigurasi database dari variabel lingkungan dan membuat koneksi MySQL, serta cara menggunakan panggilan balik PreStop untuk menutup koneksi MySQL dalam lingkungan runtime Java.