全部產品
Search
文件中心

:事件請求處理常式(Event Handler)

更新時間:Jul 06, 2024

本文介紹Java事件請求處理常式的結構特點和樣本。

處理常式介面

您在使用Java編程時,必須要實現Function Compute提供的介面類,fc-java-core庫為事件請求處理常式定義了以下兩個介面。

  • StreamRequestHandler

    以流的方式接收輸入的event事件並返回執行結果。您需要從輸入資料流中讀取調用函數時的輸入,處理完成後把函數執行結果寫到輸出資料流中來返回。

  • PojoRequestHandler

    以泛型的方式接收輸入的event事件並返回執行結果。您可以自訂輸入和輸出的類型,但是輸入和輸出的類型必須是POJO類型。

StreamRequestHandler

一個最簡單的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());
    }
}           
  • 包名和類名

    由於Java有包的概念,因此執行方法和其他語言有所不同,需要包含包的資訊。程式碼範例中請求處理常式(handler)為example.HelloFC::handleRequest,其中example標識為包名,HelloFC標識為類名,handleRequest標識為類方法。

    說明 包名和類名可以是任意的,但是需要與函數配置資訊中的請求處理常式欄位相對應。關於請求處理常式的設定,請參見建立函數
  • 實現的介面

    您的代碼中必須要實現Function Compute預定義的介面。上述的程式碼範例中實現了StreamRequestHandler,其中的inputStream參數為調用函數時傳入的資料,outputStream參數用於返回函數的執行結果。

  • Context參數

    Context參數中包含一些函數的運行時資訊(例如RequestId、臨時AccessKey等),其類型是com.aliyun.fc.runtime.Context。具體資訊,請參見上下文

  • 傳回值

    實現StreamRequestHandler介面的函數通過outputStream參數返回執行結果。

  • 引入介面庫
    其中用到的com.aliyun.fc.runtime包的依賴可以通過下文的pom.xml引用。
    <dependency>
        <groupId>com.aliyun.fc.runtime</groupId>
        <artifactId>fc-java-core</artifactId>
        <version>1.4.1</version>
    </dependency>           

    您可以通過Maven倉庫擷取fc-java-core最新的版本號碼。

在建立函數之前,您需要將代碼和其依賴的fc-java-core打包為JAR格式的壓縮包。打包方式,請參見編譯部署程式碼封裝

PojoRequestHandler

一個最簡單的PojoRequestHandler樣本如下所示。SimpleRequest的對象需支援JSON序列化,例如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;
    }
}            

傳入的event參數樣本如下。

{
  "firstName": "FC",
  "lastName": "aliyun"
}            

樣本程式

Function Compute官方庫包含了使用各種處理常式類型和介面的應用程式範例。每個應用程式範例都包含用於輕鬆編譯部署的方法。例如: