『江鸟中原』鸿蒙云函数开发
  1haVnPddyIAC 2023年12月09日 50 0

概括

Cloud Functions,是一项Serverless计算服务,提供FaaS(Function as a Service)能力,一方面云函数将开发测试的对象聚焦到函数级别,可以帮助大幅简化应用开发与运维相关的事务,另一方面可以通过在应用中集成云函数SDK,便捷操作云数据库、云存储等,提升业务功能构建的便利性。云函数可以根据函数的实际流量对函数进行弹性伸缩,无需对服务器资源进行管理,解决了开发者运维管理的难题。

传统难点与限制

『江鸟中原』鸿蒙云函数开发_鸿蒙云函数

①开发难度高,版本周期长

·引入复杂的框架,例如Spring Boot、.SpringCloud

·引入多种中间件,比如数据中间件、日志中间、版本发布周期长

②运维工作专业性强、成本高

包括资源创建、中间件部署、业务部署

③资源使用成本问题

租用/购买多少资源是合适的,流量不确定如何应对

全新方案

『江鸟中原』鸿蒙云函数开发_鸿蒙云函数_02

Serverless极简开发、零运维,提供了极简编程框架,无需申请资源即可轻松操作云数据库和云存储。同时,它支持自动部署,并拥有丰富的触发器体系,可以与周边服务无缝联通。此外,它还提供了日志和指标监控功能,保证高可用性。而且,按使用量付费的模式,使得资源的成本控制更加灵活,同时还能够实现自动弹性伸缩,调用次数和资源使用时间均按需按量伸缩,毫秒级冷启动功能更是能够有效节省成本。

Cloud Function工作原理

简单说:Cloud Function是一种无服务器计算服务,它允许开发人员编写和部署单独的函数,以响应特定的事件和触发器。Cloud Function的工作原理是基于事件驱动的,当特定的事件发生时,Cloud Function会自动触发相应的函数执行。这些事件可以是来自云平台的操作,如存储桶的文件上传、数据库的更新或者消息队列的消息等。当事件触发时,Cloud Function会自动创建一个运行环境,并执行相应的函数代码。这种无服务器的架构可以根据实际需求动态扩展和缩减资源,从而实现高效的计算资源利用和成本控制。

如下图所示:

『江鸟中原』鸿蒙云函数开发_Cloud_03

除了事件驱动的工作原理之外,Cloud Function还涉及到以下几个方面的工作原理:

1. 弹性扩展:Cloud Function可以根据负载自动扩展和缩减计算资源,确保在高负载时能够提供足够的计算能力,而在低负载时可以节省成本。

2. 无状态执行:每个Cloud Function都是独立且无状态的,它们不会保留任何本地状态或数据,这意味着它们可以随时被启动、停止和重新启动,而不会影响其它函数的执行。

3. 平台管理:Cloud Function的部署、监控和管理都由云平台自动完成,开发人员无需关心底层的基础设施管理,可以专注于函数的编写和业务逻辑的实现。

4. 多语言支持:Cloud Function支持多种编程语言,如JavaScript、Python、Go等,开发人员可以根据自己的喜好和需求选择最适合的语言来编写函数。

5. 事件触发器:Cloud Function可以与各种云平台服务集成,如存储、数据库、消息队列等,通过这些服务的事件触发器来触发函数的执行,实现不同服务之间的协同工作。

总的来说,Cloud Function的工作原理是基于事件驱动和无服务器计算的理念,通过弹性扩展、无状态执行、平台管理、多语言支持和事件触发器等特性,实现高效、灵活和成本效益的计算资源利用。

Cloud Functions.应用场景

开通服务
  1. 登录AppGallery Connect网站,点击"我的项目"。
  2. 在项目列表中选择您需要开通云函数服务的项目。
  3. 在左侧导航栏选择"构建 > 云函数"。
  4. 点击页面右上角"立即开通"。
集成SDK
针对DevEco Studio开发环境,华为提供了maven仓集成方式的SDK包,开发前需集成SDK到您的DevEco Studio项目中。
  1. 登录在AppGallery Connect网站点击"我的项目",在项目下的应用列表中选择您需要开通云函数的应用。
  2. 在项目设置的"常规"页签下,点击"应用"栏下的"agconnect-services.json"下载配置文件。
  3. 将"agconnect-services.json"文件拷贝到entry模块目录下。

『江鸟中原』鸿蒙云函数开发_鸿蒙云函数_04

4.打开entry模块下的build.gradle文件,添加如下代码集成Cloud Functions SDK。

dependencies 
{ 
    ... 
    implementation 'com.huawei.agconnect:agconnect-function:1.2.2.300' 
    ... 
}

5.点击界面上的"Sync Now"链接同步已完成的配置。

创建云函数

1.开通云函数服务后,在云函数界面,点击"+创建函数"。

2.在创建函数中,完成函数定义,包括函数基本信息,函数部署信息及函数代码等内容的填写。

『江鸟中原』鸿蒙云函数开发_鸿蒙云函数_05

3.在handler.js的输入框中输入以下代码,来实现加法计算

let myHandler = function(event, context) { 
   var sum; 
   if (event.body) { 
      var reqBody = JSON.parse(event.body) 
      var number1=reqBody.number1 
      var number2=reqBody.number2 
      sum = number1+number2 
   }else { 
      sum = 0 
   } 
   var obj={"result":sum} 
   var res = new context.HTTPResponse(obj, { 
      "res-type": "context.env", 
      "faas-content-type": "json" 
   }, "application/json", "200"); 
   //send info log 
   context.logger.info("this is message of debug log"); 
   //send info log 
   context.logger.info("this is message of error log"); 
   //send error log 
   context.logger.error("Test error log"); 
   //send response 
   context.callback(res); 
}; 
module.exports.myHandler = myHandler;
测试函数
  1. 您可以通过两种方式进入函数测试页面。
  • 点击函数详情界面右上角的"测试"按钮。
  • 在Cloud Functions主界面上左侧导航栏点击"函数",在函数页面点击"测试"页签。
  1. 选择刚刚创建的函数及其版本,在事件中输入如下代码:

 3.在执行结果中查看结果,与结果一致:

{
"headers":{
"faas-content-type":"json",
"res-type":"context.env"
},
"isBase64Encoded":false,
"body":"{\"result\":0}",
"contentType":"application/json",
"statuscode":"200"
}
添加触发器
  1. 在函数列表中点击函数名称进入函数详情页面。如果是函数别名,则进入函数别名配置页面。
  2. 点击配置页签下的"+添加触发器"。
  3. 在"配置触发器"区域配置"触发器类型"等信息,此处以HTTP触发器类型和POST请求方式为例。

『江鸟中原』鸿蒙云函数开发_鸿蒙云函数_06

  1. 完成后点击"添加"并点击"保存"。
  2. 将详细信息中的触发URL的后缀保存,作为客户端请求时的触发器标识。

『江鸟中原』鸿蒙云函数开发_Cloud_07

此外,具体的界面可以自行设计,这里不展开

具体函数开发

  1. 在应用启动的onStart方法中获取控件实例并设置按钮的点击事件。
@Override 
public void onStart(Intent intent) { 
    super.onStart(intent); 
    super.setUIContent(ResourceTable.Layout_ability_main); 
 
    textFieldNum1 = (TextField)findComponentById(ResourceTable.Id_editText_number1); 
    textFieldNum2 = (TextField)findComponentById(ResourceTable.Id_editText_number2); 
    textView = (Text)findComponentById(ResourceTable.Id_textView_result); 
    Button btn_add = (Button)findComponentById(ResourceTable.Id_btn_add); 
    btn_add.setClickedListener(listener -> testFunctionAdd()); 
}

2.初始化云函数服务。

AGConnectFunction function = AGConnectFunction.getInstance();

3.生成云函数所需要的事件的map对象,这里因为我们的云函数中设置的事件的key值为"number1"和"number2",所以我们设置map的key值为"number1"和"number2"。

HashMap<String, Integer> number = new HashMap(); 
number.put("number1", Integer.parseInt(textFieldNum1.getText())); 
number.put("number2", Integer.parseInt(textFieldNum2.getText()));

4.调用云函数SDK中的wrap方法指定触发器,call方法传入事件的map作为参数,发送事件的HTTP请求并使用云函数进行计算,并且添加请求的回调,将接收到云函数的返回结果显示到textView中。

HarmonyTask task = function.wrap("test-function-$latest").call(number); 
task.addOnCompleteListener(new OnHarmonyCompleteListener<FunctionResult>() { 
    @Override 
    public void onComplete(HarmonyTask<FunctionResult> task) { 
        if (task.isSuccessful()) { 
            String val = task.getResult().getValue(String.class); 
            textView.setText(val); 
        } else { 
            textView.setText(""); 
            AGCLogger.e(TAG, "exception", task.getException().getMessage()); 
        } 
    } 
});

最后打包测试:运行DevEco Studio工程生成HAP包,并在测试手机中安装HAP包,在两个输入框中分别输入两个数字,点击"求和"按钮就可以查看界面显示出两数之和了。

此外,云函数的应用范围非常广泛,除了计算之外,还可以运用到服务扩展,Web构建,ETL等等。





【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月09日 0

暂无评论

推荐阅读
1haVnPddyIAC