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.
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 ...");
}
}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 pada pengaturan fungsi FC. Format kait adalah [Nama paket].[Nama kelas]::[Nama metode].
Initializer Hook: Atur bidang ini menjadi
example.App::initialize. Ini menentukan metodeinitializedalam file App.java dari paketexample.PreStop Hook: Atur bidang ini menjadi
example.App::preStop. Ini menentukan metodepreStopdalam file App.java dari paketexample.
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.
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang dituju.
Pada halaman detail fungsi, klik tab Test Function, klik Test Function, lalu pilih .
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-bf73bbb91b69Setiap 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.