更新时间:2025-08-19 gmt 08:00
spring cloud function适配流程-j9九游会登录
前提条件
已有开发完成的spring cloud function项目。
步骤一:改造java项目
- 将下载的两个sdk文件放在本地目录,例如d:\\runtime中。
- 在spring cloud function项目的命令行窗口中执行以下命令,将spring cloud function的sdk安装到本地的maven仓库中。
请根据实际本地目录修改命令行。
mvn install:install-file -dfile=d:\runtime\spring-cloud-function-adapter-1.0.0.jar -dgroupid=com.huawei.function -dartifactid=spring-cloud-function-adapter -dversion=1.0.0 -dpackaging=jar
- 在项目的命令行窗口中执行以下命令,将java的runtime sdk安装到本地的maven仓库中。
请根据实际本地目录修改命令行。
mvn install:install-file -dfile=d:\runtime\runtime-2.0.5.jar -dgroupid=runtime -dartifactid=runtime -dversion=2.0.5 -dpackaging=jar
- 在spring cloud function项目的命令行窗口中执行以下命令,将spring cloud function的sdk安装到本地的maven仓库中。
- 在spring cloud function项目中的“pom.xml”文件中添加以下dependency内容:
- 添加spring cloud function相关依赖。
com.huawei.function spring-cloud-function-adapter 1.0.0 com.huawei.function core-runtime-sdk - 添加runtime-sdk。
runtime runtime 2.0.5 - 在pom.xml中添加插件用来将代码和依赖包打包到一起。请把mainclass替换为@springbootapplication下的类。
maven-assembly-plugin jar-with-dependencies com.example.springcloudfunctionadapterdemo.springcloudfunctionadapterdemoapplication ${project.name} make-assembly package single
- 添加spring cloud function相关依赖。
步骤二:配置函数代码
- 配置spring cloud function部分代码。
支持function、consumer、supplier方法,入参即为事件函数的事件类型,可参考函数支持的触发事件自行修改需要的触发事件类型,此处以kafka事件为例。
package com.example.springcloudfunctionadapterdemo; import com.huawei.services.runtime.context; import com.huawei.services.runtime.entity.kafka.kafkatriggerevent; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.messaging.message; import java.util.arrays; import java.util.function.consumer; import java.util.function.function; import java.util.stream.collectors; @configuration public class functionconfig { @bean public functionecho() { system.out.println("echo"); return payload -> string.valueof(payload); } @bean public consumer kafkaeventconsumer(){ return (input)->{ system.out.println("***************"); system.out.println(arrays.stream(input.getrecords()).map(record -> arrays.tostring(record.getmessages())).collect(collectors.joining())); system.out.println("***************"); }; } @bean public consumer > kafkaeventmessageconsumer(){ return (inputmessage)->{ kafkatriggerevent input = inputmessage.getpayload(); context functioncontext = (context) inputmessage.getheaders().get("functioncontext"); system.out.println("***************"); system.out.println(functioncontext.getmemorysize()); system.out.println(arrays.stream(input.getrecords()).map(record -> arrays.tostring(record.getmessages())).collect(collectors.joining())); system.out.println("***************"); }; } } - 编写适配spring cloud function的函数入口代码。
- 继承functioninvoker类,需要设置两个类,第一个为function的入参类型,第二个为function的返回类型。
- 编写函数执行入口:
public string execute(kafkatriggerevent request, context context) throws nosuchmethodexception { return handlerequest(request, context, "echo"); }
spring cloud function的函数入口完整示例代码:
package com.example.springcloudfunctionadapterdemo; import com.huawei.services.runtime.context; import com.huawei.services.runtime.entity.kafka.kafkatriggerevent; import com.huawei.springframework.cloud.function.adapter.functioninvoker; public class handler extends functioninvoker
{ public string execute(kafkatriggerevent request, context context) throws nosuchmethodexception { return handlerequest(request, context, "echo"); } public string execute2(kafkatriggerevent request, context context) throws nosuchmethodexception { return handlerequest(request, context, "pageeventconsumer"); } public string execute3(kafkatriggerevent request, context context) throws nosuchmethodexception { return handlerequest(request, context, "kafkaeventmessageconsumer"); } } - 编写main函数代码。
import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; @springbootapplication public class springcloudfunctionadapterdemoapplication { public static void main(string[] args) { springapplication.run(springcloudfunctionadapterdemoapplication.class, args); } } - 执行以下命令打包工程,生成一个名为“jar-with-dependencies.jar”的文件。
mvn package assembly:single
测试函数
- 登录,左侧导航栏选择,单击右上角“创建函数”进入创建函数页面,选择“创建空白函数”。
- 如图1所示,配置函数基本信息,配置完成后单击右下角“创建函数”完成创建。
图1 创建java函数
- 进入函数详情页,在“代码”页签下,单击右侧,添加4的jar文件上传。
- 上传成功后,选择“设置 > 常规设置”,修改需要测试的“函数执行入口”参数,本例可修改为“com.example.springcloudfunctionadapterdemo.handler.execute”,单击。
- 回到“代码”页签,单击代码编辑区的“测试”,选择“创建新的测试事件”,在云事件模板列表中选择需要测试的事件模板,例如本示例中使用kafka事件,则可选择kafka事件模板,单击“创建”。
- 单击“测试”,查看函数执行结果。
函数执行结果分为三部分,分别为函数返回(由callback返回)、执行摘要、日志输出(由console.log或getlogger()方法获取的日志方法输出),参考表1查看结果说明。
表1 执行结果说明 参数项
执行成功
执行失败
函数返回
返回函数中定义的返回信息。
返回包含错误信息和堆栈异常报错信息的json文件。格式如下:
{ "errormessage": "", "stacktrace": [] }errormessage:runtime返回的错误信息
stacktrace:runtime返回的堆栈异常报错信息
执行摘要
显示请求id、配置内存、执行时长、实际使用内存和收费时长。
显示请求id、配置内存、执行时长、实际使用内存和收费时长。
日志
打印函数日志,最多显示4kb的日志。
打印报错信息,最多显示4kb的日志。
相关文档
意见反馈
文档内容是否对您有帮助?
提交成功!非常感谢您的反馈,我们会继续努力做到更好!
您可在查看反馈及问题处理状态。
系统繁忙,请稍后重试
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨