Topik ini menjelaskan struktur penanganan event dalam Java dan menyertakan contoh implementasi.
Antarmuka Penanganan
Saat memprogram dalam Java, Anda perlu mengimplementasikan antarmuka yang disediakan oleh Function Compute. Pustaka fc-java-core mendefinisikan dua antarmuka berikut untuk penanganan event:
Menggunakan aliran untuk menerima data
eventmasukan dan mengembalikan hasil eksekusi. Anda harus membaca data masukan dari aliran masukan dan menulis hasil eksekusi ke aliran keluaran.Menggunakan tipe plain old Java object (POJO) untuk menerima
eventmasukan dan mengembalikan respons. Anda dapat menyesuaikan masukan dan keluaran penanganan. Baik masukan maupun keluaran harus bertipe POJO.
StreamRequestHandler
Berikut adalah kode sampel yang menggambarkan implementasi StreamRequestHandler:
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());
}
} - Nama paket dan kelas
Java memiliki metode eksekusi yang unik dibandingkan bahasa lain karena penggunaan paket. Penanganan dalam kode sampel adalah
example.HelloFC::handleRequest, di manaexampleadalah nama paket Java,HelloFCadalah nama kelas, danhandleRequestadalah metode kelas.Catatan Nama paket dan kelas dapat disesuaikan, tetapi harus sesuai dengan nilai parameter Handler dalam konfigurasi fungsi. Untuk informasi lebih lanjut tentang cara mengonfigurasi Handler, lihat Buat sebuah fungsi. - Antarmuka yang diimplementasikan
Kode Anda harus mengimplementasikan antarmuka yang telah ditentukan sebelumnya yang disediakan oleh Function Compute. Dalam contoh ini,
StreamRequestHandlerdiimplementasikan. Parameter inputStream dari penanganan menentukan parameter masukan saat memanggil fungsi, sedangkan parameter outputStream digunakan untuk mengembalikan hasil eksekusi. - Konteks
Parameter Konteks berisi informasi waktu proses dari sebuah fungsi, seperti ID permintaan dan pasangan AccessKey sementara. Parameter ini bertipe
com.aliyun.fc.runtime.Context. Untuk informasi lebih lanjut, lihat Konteks. - Nilai pengembalian
Fungsi yang mengimplementasikan
StreamRequestHandlermengembalikan hasil eksekusi menggunakan parameteroutputStream. - Pustaka antarmukaDependensi paket
com.aliyun.fc.runtimedapat dirujuk dalam filepom.xmlberikut:<dependency> <groupId>com.aliyun.fc.runtime</groupId> <artifactId>fc-java-core</artifactId> <version>1.4.1</version> </dependency>Anda dapat mengunjungi repositori Maven untuk mendapatkan versi terbaru dari paket
fc-java-core.
Sebelum membuat sebuah fungsi, Anda harus mengekstrak kode dan dependensinya fc-java-core ke dalam paket JAR. Untuk informasi lebih lanjut tentang cara mengekstrak kode dan dependensinya, lihat Kompilasi dan deploy paket kode.
PojoRequestHandler
Berikut adalah kode sampel yang menggambarkan implementasi PojoRequestHandler: Objek SimpleRequest adalah objek yang dapat diserialisasi menjadi string JSON, seperti objek tipe POJO.
// 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);
}
} // 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;
}
} Berikut adalah kode sampel yang menjelaskan parameter event masukan:
{
"firstName": "FC",
"lastName": "aliyun"
} Program sampel
- java11-blank-stream-event: menggunakan panggilan balik event dalam format aliran.
- java11-blank-pojo-event: menggunakan panggilan balik event dalam format POJO.