本文介紹Java事件請求處理常式的結構特點和樣本。
處理常式介面
您在使用Java編程時,必須要實現Function Compute提供的介面類,fc-java-core庫為事件請求處理常式定義了以下兩個介面。
以流的方式接收輸入的
event
事件並返回執行結果。您需要從輸入資料流中讀取調用函數時的輸入,處理完成後把函數執行結果寫到輸出資料流中來返回。以泛型的方式接收輸入的
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"
}
樣本程式
- java11-blank-stream-event:使用Stream格式的事件回調處理常式。
- java11-blank-pojo-event:使用POJO格式的事件回調處理常式。