j9九游会登录/ 函数工作流 functiongraph/ 最佳实践/ / / spring cloud function适配流程
更新时间:2025-08-19 gmt 08:00

spring cloud function适配流程-j9九游会登录

前提条件

已有开发完成的spring cloud function项目。

步骤一:改造java项目

  1. 将下载的两个sdk文件放在本地目录,例如d:\\runtime中。
    1. 在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
    2. 在项目的命令行窗口中执行以下命令,将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
  2. 在spring cloud function项目中的“pom.xml”文件中添加以下dependency内容:
    1. 添加spring cloud function相关依赖。
      
           com.huawei.function
           spring-cloud-function-adapter
           1.0.0
           
               
                   com.huawei.function
                   core-runtime-sdk
               
           
       
    2. 添加runtime-sdk。
      
          runtime
          runtime
          2.0.5
      
    3. 在pom.xml中添加插件用来将代码和依赖包打包到一起。请把mainclass替换为@springbootapplication下的类。
      
        
          
            maven-assembly-plugin
            
              
                jar-with-dependencies
              
              
                
                  com.example.springcloudfunctionadapterdemo.springcloudfunctionadapterdemoapplication
                
              
              ${project.name}
            
            
              
                make-assembly
                package
                single
                
              
            
          
        
      

步骤二:配置函数代码

  1. 配置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 function echo() {
            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("***************");
            };
           }
    }
  2. 编写适配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");
        }
    }
  3. 编写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);
        }
    }
  4. 执行以下命令打包工程,生成一个名为“jar-with-dependencies.jar”的文件。
    mvn package assembly:single

测试函数

  1. 登录,左侧导航栏选择函数 > 函数列表,单击右上角“创建函数”进入创建函数页面,选择“创建空白函数”。
  2. 图1所示,配置函数基本信息,配置完成后单击右下角“创建函数”完成创建。
    图1 创建java函数
  3. 进入函数详情页,在“代码”页签下,单击右侧上传代码 > jar文件 ,添加4的jar文件上传。
  4. 上传成功后,选择“设置 > 常规设置”,修改需要测试的“函数执行入口”参数,本例可修改为“com.example.springcloudfunctionadapterdemo.handler.execute”,单击保存
  5. 回到“代码”页签,单击代码编辑区的“测试”,选择“创建新的测试事件”,在云事件模板列表中选择需要测试的事件模板,例如本示例中使用kafka事件,则可选择kafka事件模板,单击“创建”
  6. 单击“测试”,查看函数执行结果。

    函数执行结果分为三部分,分别为函数返回(由callback返回)、执行摘要、日志输出(由console.log或getlogger()方法获取的日志方法输出),参考表1查看结果说明。

    表1 执行结果说明

    参数项

    执行成功

    执行失败

    函数返回

    返回函数中定义的返回信息。

    返回包含错误信息和堆栈异常报错信息的json文件。格式如下:

    {
      "errormessage": "",
      "stacktrace": []
    }

    errormessage:runtime返回的错误信息

    stacktrace:runtime返回的堆栈异常报错信息

    执行摘要

    显示请求id、配置内存、执行时长、实际使用内存和收费时长。

    显示请求id、配置内存、执行时长、实际使用内存和收费时长。

    日志

    打印函数日志,最多显示4kb的日志。

    打印报错信息,最多显示4kb的日志。

相关文档

网站地图