Bir Java işleyici, Function Compute (FC) işlevinize gelen olayları işler. FC, her çağrıyı işlev yapılandırmanızda belirtilen işleyici yöntemine yönlendirir.
İşlevleri HTTP tetikleyicileri veya özel alan adları aracılığıyla çağırmak için HTTP tetikleyicisi kullanarak işlev çağırma konusuna bakın.
İşleyici biçimi
Function Compute konsolu üzerindeki Handler parametresini aşağıdaki biçimde ayarlayın:
[Package name].[Class name]::[Method name]
Örneğin, paketiniz example, sınıfınız HelloFC ve yönteminiz handleRequest ise:
example.HelloFC::handleRequest
Paket ve sınıf adları özelleştirilebilir ancak işlev yapılandırmanızdaki Handler değeriyle eşleşmelidir. Olay işlevi oluşturma.
İşleyici arabirimleri
Java işleyiciler, fc-java-core kitaplığındaki bir arabirimi uygulamalıdır:
| Arabirim | Giriş/Çıkış | Kullanım durumu |
|---|---|---|
StreamRequestHandler |
InputStream / OutputStream |
Ham bayt akışlarını veya POJO ile eşleşmeyen verileri işlerken |
PojoRequestHandler<I, O> |
Özel POJO türleri | Java nesnelerine eşlenen yapılandırılmış JSON verileriyle çalışırken |
Maven bağımlılığı
pom.xml dosyanıza fc-java-core bağımlılığını ekleyin:
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-core</artifactId>
<version>1.4.1</version>
</dependency>
En son sürüm için Maven deposunu kontrol edin.
İşlev oluşturmadan önce kodunuzu ve fc-java-core bağımlılığını bir JAR dosyasında paketleyin. Kod paketlerini derleme ve dağıtma.
StreamRequestHandler
StreamRequestHandler girişi bir InputStream üzerinden okur ve çıkışı bir OutputStream üzerine yazar.
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**: İşlev çağrıldığında geçirilen olay verilerini içerir.**
outputStream**: İşlev dönüş verilerini alır.**
context**: İstek ID'si ve geçici AccessKey çifti gibi çalışma zamanı bilgilerini sağlar. Tür:com.aliyun.fc.runtime.Context. Bağlam.
PojoRequestHandler
PojoRequestHandler<I, O> giriş ve çıkış için genel türler kullanır. Her ikisi de JSON serileştirme desteğine sahip POJO olmalıdır.
İşleyici sınıfı
// 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);
}
}
İstek ve yanıt sınıfları
// 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;
}
}
Örnek giriş olayı
{
"firstName": "FC",
"lastName": "aliyun"
}
Örnek: HTTP tetikleyicisi ile işlev çağırma
Bu bölümde, HTTP tetikleyici isteklerinin nasıl işleneceği ve yanıtların nasıl döndürüleceği gösterilmektedir.
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Aşağıdaki örnek kodla Java çalışma zamanında oluşturulmuş bir işlev. Bkz. Olay işlevi oluşturma
İşlev için yapılandırılmış bir HTTP tetikleyicisi. Bkz. HTTP tetikleyicisi yapılandırma
Örnek kod
İşleyici, giriş/çıkış türleri olarak HTTPTriggerEvent ve HTTPTriggerResponse ile PojoRequestHandler kullanır. İstek ve yanıt biçimleri için bkz. HTTP tetikleyicisi kullanarak işlev çağırma.
App.java - Giriş sınıfı
HTTPTriggerEvent.java - İstek biçimi
HTTPTriggerResponse.java - Yanıt biçimi
Ek Maven bağımlılıkları
fc-java-core yanına jackson ve lombok ekleyin:
<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>
İşlevi çağırma
Function Compute konsoluna giriş yapın. Sol gezinme bölmesinde Functions seçeneğine tıklayın.
Üst gezinme çubuğunda bir bölge seçin. Functions sayfasında hedef işleve tıklayın.
HTTP tetikleyicisinin genel uç noktasını almak için Triggers sekmesine tıklayın.
-
Aşağıdaki curl komutunu çalıştırın. URL'yi tetikleyicinizin genel uç noktasıyla değiştirin:
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%
Authentication Method seçeneği No Authentication olarak ayarlandıysa işlevi doğrudan Postman veya curl ile çağırın.
Authentication Method seçeneği Signature Authentication veya JWT Authentication olarak ayarlandıysa ilgili kimlik doğrulama yöntemini kullanın. Bkz. Kimlik doğrulama.
Yaygın hatalar
Bu işleyici HTTP tetikleyici girişi bekler. Test Function düğmesi aracılığıyla düz bir dize (örneğin "Hello, FC!") ile çağrılması serileştirme hatasına neden olur:
{
"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)",
"..."
]
}
Bu işleyiciyi test etmek için HTTP tetikleyici uç noktası üzerinden çağırın veya HTTPTriggerEvent yapısıyla eşleşen bir JSON yükü sağlayın.
Örnek programlar
Farklı işleyici türleri için örnek programlar:
java11-blank-stream-event - Akış biçimli olay işleyicisi
java11-blank-pojo-event - POJO biçimli olay işleyicisi