移动云函数计算(SFC)Java函数开发指南
java函数开发指南
目前支持的java开发语言版本为 java8。
1. 函数定义
函数接口定义
- 作用域 返回参数 函数名(byte[] event, Context context)
- 作用域:提供给函数调用的用户函数必须定义为public
- 返回参数:用户定义,函数负责转换为字符串,作为HTTP Response返回。
- 函数名:用户定义函数名称。
执行事件(event):传给函数执行的实际参数,类型为[]byte。
- 在页面触发测试中,event为用户输入的测试事件参数。
- 在http触发器中,event为用户POST,PUT方法的body内容。
- 在其他触发器中,event为平台封装的cloudevent格式数据。
- 函数中需要将event序列化到提前定义好的结构体Event中。
上下文环境(context)Runtime提供了函数执行的上下文,通过上下文对象context,可以在函数中获取相关函数执行的上下文环境,具体接口定义在SDK接口中说明。
函数执行入口:
- 函数执行入口格式”[包名-类名].[函数名]”,例如创建函数是设置为sfc-HelloWorld.runJob,那么会自动加载sfc-HelloWorld.runJob函数,如下图所示
2. SDK接口
Context类中提供了一下上下文供用户使用,其声明和功能如下表所示:
方法名 | 方法说明 |
---|---|
context.GetRequestID() | 获取请求ID |
context.GetStartTime() | 获取函数执行时间 |
context.GetFunctionName() | 获取函数名或函数id |
context.GetVersion() | 获取函数当前版本 |
context.GetMemorySize() | 获取函数配置内存 |
3. 开发Java函数
开发Java函数,请您下载工程示例 sfc-java-example.zip或者将示例工程中的sfc-java-core-${version}.jar 引入当前工程。
使用idea打开,设置jdk环境, 加载maven依赖,加载完成后,效果 如下图 :
3.1 编写函数
要创建的函数 HelloWord.runJob(byte[] eventData, Context context),具体内容如下:
package sfc;
import com.ecloud.sfc.runtime.Context;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class HelloWorld {
public Object runJob(byte[] eventData, Context context) {
Event event = null;
try {
event = new ObjectMapper().readValue(eventData, Event.class);
} catch (IOException e) {
System.out.println(e);
}
assert eventData != null;
System.out.println("EVENT INPUT:" + event.toString());
System.out.println("CONTEXT : " + context.toString());
return "sfc func done";
}
static class Event {
@JsonProperty("name_key_1")
String nameKey1;
@JsonProperty("name_key_2")
String nameKey2;
@JsonProperty("name_key_3")
String nameKey3;
public String getNameKey1() {
return nameKey1;
}
public void setNameKey1(String nameKey1) {
this.nameKey1 = nameKey1;
}
public String getNameKey2() {
return nameKey2;
}
public void setNameKey2(String nameKey2) {
this.nameKey2 = nameKey2;
}
public String getNameKey3() {
return nameKey3;
}
public void setNameKey3(String nameKey3) {
this.nameKey3 = nameKey3;
}
@Override
public String toString() {
return "Event{" +
"nameKey1='" + nameKey1 + '\'' +
", nameKey2='" + nameKey2 + '\'' +
", nameKey3='" + nameKey3 + '\'' +
'}';
}
}
}
3.2 打包函数, 并压缩为zip 包
工程示例中已配置maven-shade-plugin插件进行打包, 在工程根目录执行 mvn clean package , 可以将用户编写的函数打成jar包(sfc-java-example-${version}.jar)。
maven-shade-plugin配置如下,
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ecloud.sfc.demo</groupId>
<artifactId>sfc-java-demo</artifactId>
<version>1.2</version>
<properties>
<!--sfc core version -->
<sfc-java-core.version>1.2</sfc-java-core.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<jackson-version>2.9.5</jackson-version>
<maven-compiler-version>3.6.1</maven-compiler-version>
<maven-shade-version>3.2.4</maven-shade-version>
</properties>
<dependencies>
<dependency>
<groupId>com.ecloud.sfc.runtime</groupId>
<artifactId>sfc-java-core</artifactId>
<version>${sfc-java-core.version}</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/sfc-java-core-${sfc-java-core.version}.jar</systemPath>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson-version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>${maven-shade-version}</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<!-- <descriptorRefs>-->
<!-- <descriptorRef>jar-with-dependencies</descriptorRef>-->
<!-- </descriptorRefs>-->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<targetPath>lib/</targetPath>
<directory>lib/</directory>
<includes>
<include>sfc-java-core-${sfc-java-core.version}.jar</include>
</includes>
</resource>
</resources>
</build>
</project>
下一步,使用zip命令,将 jar包 放置在一个文件夹中,, 压缩为一个zip包 。
在web界面上传 zip包。
4. 测试Java函数
4.1 创建测试事件
新建测试事件模板中选择空消息模板,事件名称为“test-event”,并保存。根据需要输入测试事件的body内容,此处输入的参数,可以在HelloWord.runJob(byte[] eventData, Context context) 中通过 eventData 反序列化得到,如图:
{
"name_key_1": "v1",
"name_key_2": "v2",
"name_key_3": "v3"
}
4.2 测试执行
在函数详情页面,选择具体的测试事件,点击执行。 执行后,结果展分为三部分示,分别为函数执行结果、函数执行摘要、函数执行日志。
本文由 vps主机对比评测网 刊发,转载请注明出处