Tüm Ürünler
Search
Belge Merkezi

Function Compute:Java handlers

Son Güncelleme:Oct 08, 2026

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.

Not

İş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:

Ö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ı

App.java

package example;

import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.PojoRequestHandler;

public class App implements PojoRequestHandler<HTTPTriggerEvent, HTTPTriggerResponse> {

    @Override
    public HTTPTriggerResponse handleRequest(HTTPTriggerEvent request, Context context) {
        context.getLogger().info("Receive HTTP Trigger request: " + request.toString());
        String requestBody = request.getBody();
        if (request.isIsBase64Encoded()) {
            requestBody = new String(java.util.Base64.getDecoder().decode(request.getBody()), StandardCharsets.UTF_8);
        }
        String message = "HTTP Trigger request body: " + requestBody;
        context.getLogger().info(message);
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "text/plain");
        return HTTPTriggerResponse.builder().withStatusCode(200).withHeaders(headers).withBody(request.getBody())
                .withIsBase64Encoded(request.isIsBase64Encoded()).build();
    }
}

HTTPTriggerEvent.java - İstek biçimi

HTTPTriggerEvent.java

package example;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.Map;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder(setterPrefix = "with")
public class HTTPTriggerEvent {
    private String version;
    private String rawPath;
    private Map<String, String> headers;
    private Map<String, String> queryParameters;
    private RequestContext requestContext;

    @JsonProperty("isBase64Encoded")
    private boolean IsBase64Encoded;
    private String body;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder(setterPrefix = "with")
    public static class RequestContext {
        private String accountId;
        private String domainName;
        private String domainPrefix;
        private HttpInfo http;
        private String requestId;
        private String time;
        private String timeEpoch;

        @Data
        @NoArgsConstructor
        @AllArgsConstructor
        @Builder(setterPrefix = "with")
        public static class HttpInfo {
            private String method;
            private String path;
            private String protocol;
            private String sourceIp;
            private String userAgent;
        }
    }

}

HTTPTriggerResponse.java - Yanıt biçimi

HTTPTriggerResponse.java

package example;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Map;

import com.fasterxml.jackson.annotation.JsonProperty;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder(setterPrefix = "with")
public class HTTPTriggerResponse {
    private int statusCode;
    private Map<String, String> headers;

    @JsonProperty("isBase64Encoded")
    private boolean IsBase64Encoded;
    private String body;
}

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

  1. Function Compute konsoluna giriş yapın. Sol gezinme bölmesinde Functions seçeneğine tıklayın.

  2. Üst gezinme çubuğunda bir bölge seçin. Functions sayfasında hedef işleve tıklayın.

  3. HTTP tetikleyicisinin genel uç noktasını almak için Triggers sekmesine tıklayın.

  4. 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%
Önemli
  • 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: