首页 > 其他分享 >『江鸟中原』鸿蒙云函数开发

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

时间:2023-12-09 15:32:34浏览次数:36  
标签:江鸟 Function 触发器 函数 鸿蒙 点击 context Cloud

概括

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

传统难点与限制

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

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

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

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

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

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

③资源使用成本问题

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

全新方案

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

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

Cloud Function工作原理

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

如下图所示:

『江鸟中原』鸿蒙云函数开发_鸿蒙云函数_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.在创建函数中,完成函数定义,包括函数基本信息,函数部署信息及函数代码等内容的填写。

『江鸟中原』鸿蒙云函数开发_Cloud_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请求方式为例。

『江鸟中原』鸿蒙云函数开发_Cloud_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等等。





标签:江鸟,Function,触发器,函数,鸿蒙,点击,context,Cloud
From: https://blog.51cto.com/u_16366332/8749912

相关文章

  • 第四讲 数学知识——欧拉函数
    AcWing873.欧拉函数欧拉函数的定义\(1\)~\(N\)中与\(N\)互质的数的个数被称为欧拉函数,记为\(\phi(N)\)。若在算数基本定理中,\(N=p_1^{a_1}p_2^{a_2}...p_{m}^{a_m}\),则:\(\phi(N)=N\times\frac{p_1-1}{p_1}\times\frac{p_2-1}{p_2}\times...\times\frac{p_m-1}{p_m}\)......
  • 4.常见函数
    一、概述功能:类似于java中的方法好处:提高重用性和隐藏实现细节调用:select函数名(实参列表);二、单行函数1、字符函数concat:连接substr:截取子串upper:变大写lower:变小写replace:替换length:获取字节长度trim:去前后空格lpad:左填充rpad:右填充instr:获取子串第一次出......
  • 『江鸟中原』鸿蒙---CustomDialog
    我是中工的陈金灿,这是我的鸿蒙结课大作业,以下是我的作业报告。自定义弹窗(CustomDialog)可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。具体用法请参考自定义弹窗。一、创建自己第一个自定义弹窗1.1创建自定义弹......
  • 三角函数
    三角函数一、三角函数1.1任意角初中学的角度全都是从0~360°,而高中最大的进步就是拓展了角度的范围,可以从负无穷到正无穷。(1)任意角的定义:一条射线绕着端点在平面内旋转而成的图形,角的大小就是转过的角度,角的正负就是旋转的方向(逆时针为正)。就像这个角是\(\theta\),大家不......
  • Python:函数综合案例-黑马ATM
    综合案例:黑马ATM主菜单查询余额效果存取款效果#总额totaltotal=5000000#定义None影响不大,可以不定义name=None#要求客户输入姓名name=input("请输入您姓名:")#菜单提示defmenu():print("-"*19+"主菜单"+"-"*19)print(f"{name},您......
  • Python中函数的基础定义语法
    1、函数的定义语法:def函数名(传入参数):函数体return返回值2、函数的调用:函数名(参数)3、函数使用步骤:先定义函数后调用函数4、注意事项:参数不需要,可以省略返回值如不需要,可以省略函数必须先定义后使用#定义一个函数,输出相关信息defsay_hi():......
  • Python中函数的传入参数
    函数的传入参数:在函数进行计算的时候,接受外部(调用时)提供数据函数的定义语法:def函数名(传入参数):函数体return返回值函数定义的x和y称之为形式参数(形参),表示函数声明将要使用2个参数参数之间使用逗号进行分隔函数调用的5和5称之为实际参数(形参),表示函数执行时真正使......
  • Python函数的返回值定义语法
    1、函数返回值的作用所谓返回值,就是程序中函数完成的事情后,最后给调用者的结果2、函数返回值的定义语法def函数名(参数...):函数体return返回值使用关键字:return来返回结果3、注意:函数体在遇到return后就结束,写在return后的代码不会执行#定义一个函数,完成2数相加......
  • Python函数返回值之None类型
    None类型无返回值的函数,实际上返回了None函数返回None,就表示这个函数没有返回什么有意义的内容,也就是返回了空的意思None类型的应用场景在函数无返回值上用在if判断上在if判断中,None等同于False一般用于在函数中主动返回None,配合if判断做相关处理用于声明无内容的......
  • Python函数的说明文档
    函数的说明文档函数是纯代码,可以给函数添加说明文档,辅助理解函数作用定义语法:param用于解释参数:return用于解释返回值#定义函数,进行文档说明defadd(x,y):"""add函数可以接收2个参数,进行2数相加的功能:paramx:形参x表示相加的其中一个数:para......