本文介紹Java事件請求處理程序的結構特點和示例。
處理程序接口
您在使用Java編程時,必須要實現函數計算提供的接口類,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
標識為類方法。 - 實現的接口
您的代碼中必須要實現函數計算預定義的接口。上述的代碼示例中實現了
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格式的事件回調處理程序。