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.
CatatanKetika kait Initializer mengalami timeout atau gagal, server selalu mengembalikan kode status HTTP 200. Anda harus memeriksa header respons
X-Fc-Error-Type:InitializationErroratau 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 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::InitializeKait 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
# - POSTUntuk 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.
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 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