移动云函数计算(SFC)Java函数开发指南

vps主机对比评测网 02-05 vps主机商相关 254

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主机对比评测网 刊发,转载请注明出处

本文链接: https://www.vpsvsvps.com/vps/a/5411.html

标签: 移动云,函数计算,java

“移动云函数计算(SFC)Java函数开发指南” 的相关文章

Virtono主机商: 终生65折优惠码

Virtono主机商简介: Virtono主机商自2014年成立以来,我们愉快地为来自世界各地的数以万计的客户提供服务,并不断寻找新的方式来实现我们的使命:以合...

Mondoze主机商:马来西亚VPS(原生IP) 8折促销, 5.59美元/月起, 100M带宽/不限流量

Mondoze是一家成立于2012马来西亚服务器商家,机房位于马来西亚,主打VPS业务,独立服务器,云服务器等等。Mondoze只提供优良的配置,独立内存,独立...

TmhHost主机商:全场VPS七折 CN2 GIA 香港CTG/ 日本软银可选

TmhHost是一家成立于2019年的国人主机商,提供VPS(云服务器)和独立服务器租用等,数据中心可选美国洛杉矶(CN2 GIA/高防/AS9929)、中国香...

ServerGigabit主机商: 马来西亚VPS月付$7.59起,100M带宽,不限流量

Servergigabit(千兆服务器有限公司)是一家成立于2011年的老牌马来西亚主机商家,主营马来西亚VPS、虚拟主机、独立服务器、游戏服务器、裸金属服务器...

RackNerd主机商: 新上法国机房年付18美元

RackNerd 在 LET 发布了新上法国机房的消息,位于斯特拉斯堡的 DataDock 机房,基于 KVM 架构,SSD 硬盘组Raid-10,最低年付17...