背景信息
Java语言和Python、Node.js这类脚本型语言不同,该语言需要编译后才能在JVM虚拟机中运行。针对Java语言,函数计算当前具有以下限制:
● 不支持代码编译:仅支持上传已经开发完成、编译打包后的ZIP包或JAR包。函数计算不提供Java的编译能力。
● 不支持在线编辑:由于不支持上传代码,所以不支持在线编辑代码,仅能看到通过上传 JAR 包或通过 OSS 上传两种方法提交代码。
请求处理程序
FC函数的请求处理程序,是函数代码中处理请求的方法。当函数被调用时,函数计算会运行Handler方法处理请求。
可以通过函数计算控制台配置请求处理程序(函数入口),对于Java语言的函数,请求处理程序需配置为[包名].[类名]::[方法名]。例如,包名为example,类型为HelloFC,方法名为handleRequest,则请求处理程序可配置为example.HelloFC::handleRequest。
相关jar包
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-core</artifactId>
<version>1.4.1</version>
</dependency>
函数入口
创建一个maven项目、不需要创建启动类和相关的配置文件,只专注于handleRequest内方法逻辑即可。
// 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);
}
}
备注:直接使用自定义的pojo 接收会出现部分字段接收为空的情况,原因不明,如果有问题请把接收对象替换为Object来接受,然后代码逻辑中解析成想要的pojo对象。
上下文
介绍在函数计算中使用Java运行时开发代码时,所涉及的Context(上下文)的相关概念和使用示例。
-
RequestId
本次调用请求的ID。您可以记录下该ID,当出现问题时方便查询。 -
Function
当前调用的函数的一些基本信息,例如函数名、函数入口、函数内存和超时时间。 -
Credentials
函数计算服务通过扮演服务角色而获取的一组临时密钥,其有效时间是36小时。您可以在代码中使用Credentials去访问相应的服务例如OSS,这就避免了您把自己的AccessKey信息编码在函数代码里。 -
Logger
函数计算封装过的logger。 -
Service
当前调用的服务的一些基本信息。 -
OpenTracing
链路追踪的相关信息。
部署相关
引入pom
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
然后控制台执行mvn clean package命令打包。一般打完包项目target文件会出现两个jar、选择后缀带有with-dependencies.jar的jar包部署,这个是有依赖的。
创建函数计算FC服务以及函数
打开控制台,选择创建服务
开启日志、开启允许访问vpc、关闭外网访问。其余默认禁用
选择创建函数、使用内置运行时创建、处理事件请求,通过打包的jar上传
请求处理程序是上传的jar的handleRequest方法包路径
设置项目中使用的环境变量、如kafka地址、其余相关参数
代码获取环境变量示例:String accessKeyId = System.getenv(“ACCESS_KEY_ID”);
测试函数
根据handleRequest方法的请求参数、自定义数据测试函数