Penangan memproses permintaan masuk dalam fungsi Function Compute (FC) Anda. Saat fungsi dipanggil, FC mengarahkan permintaan ke penangan yang ditentukan dalam konfigurasi fungsi tersebut.
Untuk menangani permintaan HTTP melalui pemicu HTTP atau nama domain kustom, lihat Use an HTTP trigger to invoke a function.
Format Handler
Konfigurasikan parameter Handler di Function Compute console menggunakan format berikut:
[Nama paket].[Nama kelas]::[Nama metode]Contohnya, jika paket Anda adalah example, kelas Anda adalah HelloFC, dan metode Anda adalah handleRequest:
example.HelloFC::handleRequestNama paket dan kelas dapat dikustomisasi, tetapi harus sesuai dengan nilai Handler dalam konfigurasi fungsi. Lihat Create an event function.
Antarmuka penangan
Penangan Java harus mengimplementasikan antarmuka dari pustaka fc-java-core:
| Antarmuka | Input/Output | Gunakan saat |
|---|---|---|
StreamRequestHandler | InputStream / OutputStream | Memproses aliran byte mentah atau data yang tidak dapat dipetakan ke POJO |
PojoRequestHandler<I, O> | Tipe POJO kustom | Bekerja dengan data JSON terstruktur yang dipetakan ke objek Java |
Dependensi Maven
Tambahkan fc-java-core ke file pom.xml Anda:
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-core</artifactId>
<version>1.4.1</version>
</dependency>Periksa Maven repository untuk versi terbaru.
Sebelum membuat fungsi, kemas kode Anda beserta dependensi fc-java-core ke dalam file JAR. Lihat Compile and deploy code packages.
StreamRequestHandler
StreamRequestHandler membaca input dari InputStream dan menulis output ke OutputStream.
package example;
import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.StreamRequestHandler;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class HelloFC implements StreamRequestHandler {
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
outputStream.write(new String("hello world").getBytes());
}
}inputStream: Berisi data event yang diteruskan saat fungsi dipanggil.outputStream: Menerima data hasil kembalian fungsi.context: Menyediakan informasi waktu proses seperti ID permintaan dan pasangan Kunci Akses sementara. Tipe:com.aliyun.fc.runtime.Context. Lihat Context.
PojoRequestHandler
PojoRequestHandler<I, O> menggunakan tipe generik untuk input dan output. Kedua tipe tersebut harus berupa Plain Old Java Objects (POJO) yang mendukung serialisasi JSON.
Kelas penangan
// HelloFC.java
package example;
import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.PojoRequestHandler;
public class HelloFC implements PojoRequestHandler<SimpleRequest, SimpleResponse> {
@Override
public SimpleResponse handleRequest(SimpleRequest request, Context context) {
String message = "Hello, " + request.getFirstName() + " " + request.getLastName();
return new SimpleResponse(message);
}
}Kelas permintaan dan tanggapan
// SimpleRequest.java
package example;
public class SimpleRequest {
String firstName;
String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public SimpleRequest() {}
public SimpleRequest(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}// SimpleResponse.java
package example;
public class SimpleResponse {
String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public SimpleResponse() {}
public SimpleResponse(String message) {
this.message = message;
}
}Contoh event input
{
"firstName": "FC",
"lastName": "aliyun"
}Contoh: Memanggil fungsi dengan pemicu HTTP
Contoh ini menunjukkan penangan yang memproses permintaan pemicu HTTP dan mengembalikan respons HTTP.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Membuat fungsi dalam waktu proses Java dengan kode contoh di bawah ini. Lihat Create an event function.
Mengonfigurasi pemicu HTTP untuk fungsi tersebut. Lihat Configure an HTTP trigger.
Kode contoh
Penangan mengimplementasikan PojoRequestHandler dengan HTTPTriggerEvent dan HTTPTriggerResponse sebagai tipe input dan output. Untuk format permintaan dan respons pemicu HTTP, lihat Use an HTTP trigger to invoke a function.
App.java – Kelas titik masuk
HTTPTriggerEvent.java – Format permintaan
HTTPTriggerResponse.java – Format respons
Dependensi Maven tambahan
Tambahkan Jackson dan Lombok bersama fc-java-core:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.16.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>Memanggil fungsi
Masuk ke Function Compute console. Di panel navigasi sebelah kiri, klik Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin dikelola.
Klik tab Triggers untuk mendapatkan titik akhir publik pemicu HTTP.
Jalankan perintah curl berikut: Ganti URL dengan titik akhir publik pemicu HTTP Anda. Respons yang diharapkan:
curl -i "https://dev-jav-test-fc-luiqas****.cn-shanghai.fcapp.run" -d 'hello fc3.0'HTTP/1.1 200 OK Content-Disposition: attachment Content-Length: 11 Content-Type: application/json X-Fc-Request-Id: 1-652503f2-afbfd2b1dc4dd0fcb0230959 Date: Tue, 10 Oct 2023 07:57:38 GMT hello fc3.0%
Jika Authentication Method pemicu HTTP diatur ke No Authentication, gunakan Postman atau curl untuk langsung memanggil fungsi.
Jika Authentication Method diatur ke Signature Authentication atau JWT Authentication, gunakan metode autentikasi yang sesuai. Lihat Authentication.
Error umum
Penangan ini dirancang untuk pemanggilan pemicu HTTP. Memanggilnya melalui tombol Test Function di konsol dengan input string biasa (seperti "Hello, FC!") menyebabkan error deserialisasi:
{
"errorType": "com.fasterxml.jackson.databind.exc.MismatchedInputException",
"errorMessage": "Cannot construct instance of `example.HTTPTriggerEvent` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('Hello, FC!')\n at [Source: (byte[])\"\"Hello, FC!\"\"; line: 1, column: 1]",
"stackTrace": [
"com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)",
"com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1588)",
"..."
]
}Untuk menguji penangan ini, panggil melalui titik akhir pemicu HTTP atau berikan muatan JSON yang sesuai dengan struktur HTTPTriggerEvent.
Program contoh
FC menyediakan program contoh yang menunjukkan berbagai jenis penangan:
java11-blank-stream-event – Penangan event format Stream
java11-blank-pojo-event – Penangan event format POJO